| Index: third_party/pexpect/tests/platform_checks/check2.py
|
| diff --git a/third_party/pexpect/tests/platform_checks/check2.py b/third_party/pexpect/tests/platform_checks/check2.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a7d5f89ca86b60594450b3f6cb764b8110ed8ff
|
| --- /dev/null
|
| +++ b/third_party/pexpect/tests/platform_checks/check2.py
|
| @@ -0,0 +1,44 @@
|
| +#!/usr/bin/env python
|
| +import signal
|
| +import os
|
| +import time
|
| +
|
| +def signal_handler (signum, frame):
|
| + print 'Signal handler called with signal:', signum
|
| + print 'signal.SIGCHLD=', signal.SIGKILL
|
| +
|
| +# Create a child process for us to kill.
|
| +pid = os.fork()
|
| +if pid == 0:
|
| + time.sleep(10000)
|
| +
|
| +#signal.signal (signal.SIGCHLD, signal.SIG_IGN)
|
| +signal.signal (signal.SIGCHLD, signal_handler)
|
| +
|
| +print 'Sending SIGKILL to child pid:', pid
|
| +os.kill (pid, signal.SIGKILL)
|
| +
|
| +# SIGCHLD should interrupt sleep.
|
| +# Note that this is a race.
|
| +# It is possible that the signal handler will get called
|
| +# before we try to sleep, but this has not happened yet.
|
| +# But in that case we can only tell by order of printed output.
|
| +interrupted = 0
|
| +try:
|
| + time.sleep(10)
|
| +except:
|
| + print 'sleep was interrupted by signal.'
|
| + interrupted = 1
|
| +
|
| +if not interrupted:
|
| + print 'ERROR. Signal did not interrupt sleep.'
|
| +else:
|
| + print 'Signal interrupted sleep. This is good.'
|
| +
|
| +# Let's see if the process is alive.
|
| +try:
|
| + os.kill(pid, 0)
|
| + print 'Child is alive. This is ambiguous because it may be a Zombie.'
|
| +except OSError as e:
|
| + print 'Child appears to be dead.'
|
| +
|
|
|