2014-09-22 62 views
1

我在测试用nohup调用的命令是否确实没有得到SIGHUP信号。尽管被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中调用时保持活跃状态​​?

回答

0

根据维基百科nohupignores SIGHUP而disown实际上是prevents的信号被发送。在你的python脚本中,你可以设置所有信号的信号处理程序,从而覆盖nohup的功能。

相关问题