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.
Showing
Please register or sign in to comment