5

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

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

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

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

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

4

2 回答 2

4

signal(2)手册页:

这些信号不能被捕获或忽略SIGKILLSIGSTOP

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

于 2012-11-09T10:48:19.560 回答
0

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

于 2012-11-09T15:27:17.417 回答