testnode: make killall support processes with changed title
testnode uses ProcessManager.killall to terminate all processes from a path. To determine if a process is from a path, it looks at the command line. This does not work for processes using setproctitle to change their command line.
We can see in ps:
$ ps -edf | grep nginx
slapuse+ 115059 45574 0 16:14 ? 00:00:00 nginx: master process /srv/slapgrid/slappart46/t/cvt/i/0/tmp/shared/nginx/6d79cb0e7d81dce1be97eec8a5712f08/sbin/nginx -c /srv/slapgrid/slappart46/t/cvt/i/0/tmp/inst/T-0/etc/nginx-master-introspection.conf
slapuse+ 115090 115059 0 16:14 ? 00:00:00 nginx: worker process
or by looking at cmdline, which is what psutil.Process.cmdline is using:
$ cat /proc/115090/cmdline
nginx: worker process
and that's why sometimes when cancelling a software release test while it is running tests from a software using nginx, some processes are leaked, they keep using the port and next test running on this testnode fail.
In that case, killall is called with /srv/slapgrid/slappart46/t/cvt , we can not find such process with cmdline, but we can extend this heuristic to use the current working directory:
$ ls -al /proc/115090/cwd
lrwxrwxrwx 1 slapuser46 slapuser46 0 Oct 19 16:16 /proc/115090/cwd -> /srv/slapgrid/slappart46/t/cvt/i/0/tmp/inst/T-0
This also applies an optimization of only considering processes of the current unix user.