是否有标准的linux / unix模式用于与长时间运行的进程通信?
例如,我有几百个进程,用c ++编写,并在各种机器上运行,我想通过shell脚本向他们发送重载配置,启动,停止等命令。
答案 0 :(得分:6)
答案 1 :(得分:2)
如果您尝试按照自己的描述触发启动/停止/重新加载配置等简单操作,最常用的方法是使用signals。
在shell脚本中,您可以使用kill
命令将特定信号发送到特定进程。
在您的过程中,您将实现一个或多个信号处理程序。注册信号处理程序以使用signal()
函数或sigaction()
函数接收一个或多个信号。
传统上SIGHUP
用于触发重新加载配置。 SIGSTOP
和SIGCONT
可能适合暂停和恢复。
man 7 signal
会显示可供选择的完整信号列表。
如果需要触发更复杂的操作,可以创建命名管道。让您的进程创建管道,并从shell脚本中只需echo
命令。
答案 2 :(得分:1)
由于您也关心远程进程,并假设您可以修改所有程序的源代码,您可以考虑使用某种方式与它们进行通信:
定义自己的小文本协议,让每个进程监听某个套接字或某个命名管道。您可能需要一些多路复用系统调用,如poll
使用现有的库和工具,例如MPI,Corba,或者D-Bus或ONC/RPC/XDR
更改应用程序的配置文件,并具有信号约定,例如抓住SIGHUP
重新加载配置,然后SIGTERM
正确终止配置(但是无法远程发送信号;例如ssh
kill
{{1}}命令)。