import errno import os import subprocess import signal import time def handle(sig, frame): print 'SIGCHLD' if __name__ == '__main__': signal.signal(signal.SIGCHLD, handle) p1 = None p2 = None try: p1 = subprocess.Popen('/bin/date') except OSError, e: if e[0] == errno.EINTR: print '1st Popen was Interrupted' else: raise try: p2 = subprocess.Popen('/bin/date', preexec_fn = lambda : time.sleep(2)) except OSError, e: if e[0] == errno.EINTR: print '2nd Popen was Interrupted' else: raise if p1 is not None: print 'PID1 was: %d' % p1.pid p1.wait() if p2 is not None: print 'PID2 was: %d' % p2.pid p2.wait()