我有一个使用扭曲框架的 python 应用程序。
我利用存储在twistd生成的pidfile中的值。启动程序脚本会检查它是否存在,如果pidfile已经存在,则不会生成守护程序进程。
但是,twistd在获得SIGKILL
信号时不会删除.pid文件。这使得启动程序脚本认为守护程序已在运行。
我意识到停止守护进程的正确方法是使用SIGTERM
信号,但问题是当启动守护进程的用户注销时,守护进程永远不会得到SIGTERM
信号,所以显然它被SIGKILL
杀死了。这意味着一旦用户注销,他将永远无法再次启动守护进程,因为pidfile仍然存在。
在这种情况下,有什么方法可以让该文件消失吗?
答案 0 :(得分:4)
来自signal(2)
手册页:
无法捕获或忽略信号
SIGKILL
和SIGSTOP
。
因此,该进程无法运行任何清理代码来响应该信号。通常,您只使用SIGKILL
来终止不响应SIGTERM
(可以被捕获)而退出的进程。
答案 1 :(得分:0)
您可以更改启动器(或将其包装在另一个启动器中)并在尝试重新启动twistd之前删除pid文件。