I asked a question to know how to get multiple lines of message from Python's subprocess module.
The problem is that in the course of testing, I had to kill the python process that runs gnuchess process. Using ^c in the command line seems to kill the python process, but not the gnuprocess.
For killing gnuchess, I get the pid with ps aux | grep gnuchess and run kill -9 PID. Are there other methods to kill both python and gnuchess process?
Best Answer
There is a standard method, if the programs cooperate. Run
kill -- -42
where 42 is the pid of the parent process. This sends a signal to all the processes in the process group lead by process 42 (the minus sign before the pid means process group).Normally, if you run your python script from a shell prompt and it simply forks
gnuchess
, the two processes should remain in the same process group. But this doesn't seem to be the case, since Ctrl+C sendsSIGINT
to the whole foreground process group.Gnuchess might be in its own process group because it made itself a session leader (but I don't know why it would do this), or because you've double-forked it (python forks a shell which forks gnuchess). A double fork is probably avoidable, but I can't tell you how without seeing your code.
A reasonably reliable and POSIX-compliant way of finding the pid of the
gnuchess
process isSpecific unix variants may have better ways of achieving this, such as
pgrep
.