Avoid race condition with Popen.send_signal

Devin Jeanpierre jeanpierreda at gmail.com
Mon Jan 2 20:31:29 EST 2012


> I think that catching the exception is probably the most Pythonic way.

It's the only correct way.

-- Devin

On Mon, Jan 2, 2012 at 6:51 PM, MRAB <python at mrabarnett.plus.com> wrote:
> 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.
> --
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list