我正在测试用nohup
调用的命令是否确实没有得到SIGHUP信号。
我确认如果我使用PuTTY登录我的CentOS框,运行nohup python foo.py &
,其中foo.py包含无限循环,如果我杀了PuTTY,python程序仍然会继续运行。
然后我编写了sig.py来处理并将收到的所有信号记录到sig.txt中。
import signal, os
def handler(sig, frame):
f = open('sig.txt', 'a')
f.write('signal: ' + str(sig) + '\n')
f.close()
for i in range(1, 20):
if i in [9, 19]:
continue
print 'Setting signal handler for', i
signal.signal(i, handler)
f = open('sig.txt', 'w')
f.write('start\n')
f.close()
while True:
pass
然后我在PuTTY终端中运行nohup python sig.py &
。然后我关闭了PuTTY终端。
我打开一个新的PuTTY终端并检查sig.txt的内容,我发现它。
$ cat sig.txt
start
signal: 1
所以似乎正在运行的进程仍然收到SIGHUP。
如果正在运行的进程仍然收到SIGHUP,那么在使用SIGHUP调用时它是如何保持活着的呢?