[New-bugs-announce] [issue9504] signal.signal/signal.alarm not working as expected
Alan Wilter
report at bugs.python.org
Wed Aug 4 10:33:56 CEST 2010
New submission from Alan Wilter <alanwilter at gmail.com>:
I have this example code to illustrate a problem I am having with python3. It works fine with python 2.6 and 2.7 but does not with python 3.1.
from __future__ import print_function
import os, subprocess, signal
def signal_handler( signum, frame ):
print( "PID: %s" % pid )
print( "Timed out! Process %s killed, max exec time (%ss) exceeded" % (pid, timeTol ) )
os.kill( int( pid ), 15 )
raise Exception( "Taking too long to finish... aborting!" )
if __name__ == '__main__':
timeTol = 5
cmd = 'find /'
signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(timeTol)
p = subprocess.Popen(cmd, shell=True, stderr = subprocess.STDOUT, stdout = subprocess.PIPE)
pid = p.pid
out = str( p.communicate()[0].decode() )
print(out)
Executing it:
time python3.1 timout.py
PID: 27687
Timed out! Process 27687 killed, max exec time (5s) exceeded
Traceback (most recent call last):
File "timout.py", line 23, in <module>
out = str( p.communicate()[0].decode() )
File "/sw/lib/python3.1/subprocess.py", line 719, in communicate
stdout = self.stdout.read()
File "timout.py", line 9, in signal_handler
raise Exception( "Taking too long to finish... aborting!" )
Exception: Taking too long to finish... aborting!
python3.1 timout.py 0.52s user 3.88s system 19% cpu 22.841 total
#### It prints essentially the same thing with a *very* *big* difference it takes 22 seconds and actually the alarm only works when the whole task ('find /') is finished.
----------
messages: 112771
nosy: alanwilter
priority: normal
severity: normal
status: open
title: signal.signal/signal.alarm not working as expected
type: behavior
versions: Python 3.1
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue9504>
_______________________________________
More information about the New-bugs-announce
mailing list