Avoid race condition with Popen.send_signal
MRAB
python at mrabarnett.plus.com
Mon Jan 2 18:51:37 EST 2012
On 02/01/2012 23:09, Jérôme wrote:
> Hi all.
>> When a subprocess is running, it can be sent a signal with the send_signal
> method :
>> process = Popen( args)
> process.send_signal(signal.SIGINT)
>> If the SIGINT is sent while the process has already finished, an error is
> raised :
>> File "/usr/lib/python2.7/subprocess.py", line 1457, in send_signal
> os.kill(self.pid, sig)
> OSError: [Errno 3] Aucun processus de ce type
>> To avoid this, I can check that the process is still alive :
>> process = Popen( args)
> process.poll()
> if (None == process.returncode):
> process.send_signal(signal.SIGINT)
>> It makes safer, but there is still an issue if the process ends between
> poll() and send_signal().
>> What is the clean way to avoid this race condition ?
>> Should I use try/except to catch the error or is there a more elegant way to
> go ?
>I think that catching the exception is probably the most Pythonic way.
More information about the Python-list
mailing list