Avoid race condition with Popen.send_signal

Jérôme jerome at jolimont.fr
Mon Jan 2 18:09:14 EST 2012


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 ?
Thanks.
-- 
Jérôme


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /