将命令发送到正在运行的进程的传统方法是什么?

时间:2015-11-28 07:30:14

标签: sockets unix ipc unix-socket

是否有一种传统的编写程序的方法,这样命令就可以从命令行发出给程序而不需要repl?例如,如何使用nginx(或除sudo /etc/init.d/nginx restart之外的任何其他有效命令)向正在运行的restart服务器发送命令

我的一个想法是让长时间运行的程序创建并监视其他程序可以写入的unix套接字以发送命令。另一个是创建一个带有REST接口的本地服务器,可以通过这种方式发送命令,尽管这看起来有点严重。

正确的方法是什么?

1 个答案:

答案 0 :(得分:2)

两种方式都可以,您甚至可以考虑使用一些RPC机制,例如让您的应用程序在某个JSONRPC套接字上提供unix(7)。或者使用fifo(7)。或者使用D-Bus

Unix上的一个常见习惯是让应用程序重新加载其配置文件。 SIGHUP发出信号,并在SIGTERM上保存一些持久状态(终止前)。读取signal(7)(注意只能从信号处理程序中调用异步信号安全例程;一种好方法是只在处理程序中设置一些volatile sig_atomic_t变量并在外部测试它)。另请参见POSIX signal.h文档。

您可以使您的应用程序成为专门的HTTP服务器(例如使用某些HTTP服务器库,如libonion)并为其提供一些Web界面(或RESTSOAP ... );然后,用户(或系统管理员)将使用他的浏览器与您的应用程序进行交互。

您可以使您的服务器systemd兼容。 (我不确切知道那需要什么,也许与D-bus有关。)

您可以在应用中嵌入一些命令解释器(例如GuileLua),并在某些REPL上运行一些有限类型的IPC循环,如套接字或一个fifo。小心讨厌的code injection

相关问题