如何向已停止的进程发送新信息

如何向已停止的进程发送新信息

假设我有一个长时间运行的进程,我使用以下命令停止并重新启动它:

kill -STOP <pid>
kill -CONT <pid>

是否有一致的方法来改变正在运行的进程,无论是环境变量还是某些内存位置?

像这样的东西:

    kill -STOP <pid>

    change_process <pid> --new 'value'

    kill -CONT <pid>

显然这是一个完全伪造的 api,但希望你能明白

答案1

否。已停止的进程已停止。

更改正在运行的进程的设置的传统方法是教导应用程序控制其配置文件的状态。要么有inotify watch,要么只是定期检查修改时间戳。无论哪种方式,一旦应用程序发现其配置文件被修改 - 重新读取它。

另一种方法是捕获强制重新启动或重新配置的信号。例如,Apache 在 SIGHUP 上执行软重启 - 终止所有子进程并通过重新读取配置文件来重新启动主进程。如果您有多文件配置,这种方法会更方便。很难在每个包含的子配置文件上放置一个观察器。

环境变量略有不同 - 它们在应用程序启动时被复制到进程内存中,并且不可能从进程外部访问它们。您可以要求进程更改其自己的环境,您可以将此环境提供给子进程(子进程也可以更改它)。但你无法从外部改变它们。

在这种情况下,如果您想暂停应用程序,对配置进行大量更改,然后通过重新读取配置来重新启动,则理论上 STOP-CONT 会有所帮助。但它们(SIGSTOP-SIGCONT)只能给您更多时间来更改配置。完全停止应用程序可能会更容易。

相关内容