通过linux中的shell脚本与正在运行的进程通信的标准方法

时间:2012-04-05 03:04:35

标签: linux

是否有标准的linux / unix模式用于与长时间运行的进程通信?

例如,我有几百个进程,用c ++编写,并在各种机器上运行,我想通过shell脚本向他们发送重载配置,启动,停止等命令。

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

如果您尝试按照自己的描述触发启动/停止/重新加载配置等简单操作,最常用的方法是使用signals

在shell脚本中,您可以使用kill命令将特定信号发送到特定进程。 在您的过程中,您将实现一个或多个信号处理程序。注册信号处理程序以使用signal()函数或sigaction()函数接收一个或多个信号。

传统上SIGHUP用于触发重新加载配置。 SIGSTOPSIGCONT可能适合暂停和恢复。

man 7 signal会显示可供选择的完整信号列表。


如果需要触发更复杂的操作,可以创建命名管道。让您的进程创建管道,并从shell脚本中只需echo命令。

答案 2 :(得分:1)

由于您也关心远程进程,并假设您可以修改所有程序的源代码,您可以考虑使用某种方式与它们进行通信:

  • 定义自己的小文本协议,让每个进程监听某个套接字或某个命名管道。您可能需要一些多路复用系统调用,如poll

  • 使用现有的库和工具,例如MPICorba,或者D-BusONC/RPC/XDR

  • 更改应用程序的配置文件,并具有信号约定,例如抓住SIGHUP重新加载配置,然后SIGTERM正确终止配置(但是无法远程发送信号;例如ssh kill {{1}}命令)。