2012-04-05 72 views

回答

1

既然你还在乎远程进程,并假设您可以修改所有程序的源代码,你可以考虑某种方式与他们沟通:

  • 定义自己的小文本协议,让每个进程在某个套接字或某个命名管道上侦听。你可能会需要一些复系统调用像poll

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

  • 改变应用程序的配置文件,并有信号约定,例如捕获SIGHUP重新加载配置,然后SIGTERM正确终止它(但无法远程发送信号;您需要例如ssh某些kill命令)。

+0

选项#3(信号)的缺点是,从您学习PID到发出'kill $ PID'的时间,系统_应该已将该PID重新分配给不同的进程。也许不太可能,但很可能a)你学习你的过程的PID,b)你的过程死掉,c)一个新的过程开始,d)操作系统选择你认为属于你的过程的PID。使得e)向该PID发送杀死错误的事情。 – 2015-11-12 22:34:26

6
+0

OP也希望能够与远程进程进行通信,很可能在主从模式中进行通信。信号在这种情况下不会有帮助吗? – Gangadhar 2012-04-05 04:18:25

+2

当然可以。 'kill'在ssh上运行良好。 – 2012-04-05 04:22:22

+0

谢谢你。我不知道这件事。看起来这个链接也解释了这一点 - http://stackoverflow.com/questions/1512132/how-to-send-sigint-to-a-remote-process-over-ssh – Gangadhar 2012-04-05 04:27:56

2

如果你试图触发起步一样简单的动作/为你所描述停止/重装配置,最常用的方法是使用signals

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

通常情况下,SIGHUP用于触发重新加载配置。 SIGSTOPSIGCONT可能适用于暂停和恢复。

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


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

+0

命名管道更安全。信号的缺点是,从学习PID到发出'kill $ PID'的时间,系统_应该已将PID重新分配给不同的进程。也许不太可能,但很可能a)你学习你的过程的PID,b)你的过程死掉,c)一个新的过程开始,d)操作系统选择你认为属于你的过程的PID。使得e)向该PID发送杀死错误的事情。 – 2015-11-12 22:35:52

相关问题