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.
Status | Job ID | Name | Coverage | ||||||
---|---|---|---|---|---|---|---|---|---|
External | |||||||||
failed |
#623156
external
|
ERP5.CodingStyleTest-Master |
|
||||||
running |
#623146
external
|
ERP5.UnitTest-Master |
9502:52:00 |
||||||
running |
#623147
external
|
ERP5.UnitTest-Zope2 |
9502:51:48 |
||||||
passed |
#623152
external
|
SlapOS.Eggs.UnitTest-Master.Python2 |
|
||||||
passed |
#623151
external
|
SlapOS.Eggs.UnitTest-Master.Python3 |
|
||||||
passed |
#623144
external
|
Wendelin.UnitTest-Master |
00:31:19
|
||||||