我有两个Python脚本foo.py
和bar.py
,foo.py
将通过os.system()
调用bar.py
。在Python中如何处理信号和KeyboardInterrupt?
#foo.py
import os
print os.getpid()
os.system("python dir/bar.py")
#bar.py
import time
time.sleep(10)
print "over"
说的foo.py
的PID是123,如果程序正常终止,它会打印
123
over
如果键入kill 123
,而它的运行,我去拿以下输出
123
Terminated
over
如果我按按Ctrl - C,而它的运行,我就会得到这样
123
^CTraceback (most recent call last):
File "dir/bar.py", line 4, in <module>
time.sleep(10)
KeyboardInterrupt
但如果我键入kill -SIGINT 123
,而它的运行,似乎该程序会忽略的信号,并正常退出。
123
over
在我看来是,
如果我键入kill 123
,子进程将不会受到影响。
如果我输入Ctrl - C,两个过程都将被终止。
如果在子进程运行时键入kill -SIGINT 123
,则信号将被忽略。
有人请向我解释它是如何工作的?
是不是Ctrl - C和kill -SIGINT
应该是等效的吗?
如果我输入kill 123
是否保证子过程不会受到影响(如果碰巧正在运行)?
我在Ubuntu 14.04上的方式。谢谢!