Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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?

share|improve this question
8  
Random sidenote: You can use pkill to kill a process by name, so your ps aux | grep gnuchess and kill -9 PID can just become pkill -9 gnuchess –  Michael Mrozek Oct 8 '10 at 19:42

2 Answers 2

up vote 8 down vote accepted

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 sends SIGINT 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 is

gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')

Specific unix variants may have better ways of achieving this, such as pgrep.

share|improve this answer

Try:

pkill <processname>
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.