python-twisted和SIGKILL

时间:2012-11-09 10:32:51

标签: python linux twisted sigkill

我有一个使用扭曲框架的 python 应用程序。

我利用存储在twistd生成的pidfile中的值。启动程序脚本会检查它是否存在,如果pidfile已经存在,则不会生成守护程序进程。

但是,twistd在获得SIGKILL信号时不会删除.pid文件。这使得启动程序脚本认为守护程序已在运行。

我意识到停止守护进程的正确方法是使用SIGTERM信号,但问题是当启动守护进程的用户注销时,守护进程永远不会得到SIGTERM信号,所以显然它被SIGKILL杀死了。这意味着一旦用户注销,他将永远无法再次启动守护进程,因为pidfile仍然存在。

在这种情况下,有什么方法可以让该文件消失吗?

2 个答案:

答案 0 :(得分:4)

来自signal(2)手册页:

  

无法捕获或忽略信号SIGKILLSIGSTOP

因此,该进程无法运行任何清理代码来响应该信号。通常,您只使用SIGKILL来终止不响应SIGTERM(可以被捕获)而退出的进程。

答案 1 :(得分:0)

您可以更改启动器(或将其包装在另一个启动器中)并在尝试重新启动twistd之前删除pid文件。