gpt4 book ai didi

sockets - 向正在运行的进程发送命令的传统方式是什么?

转载 作者:行者123 更新时间:2023-12-03 11:59:55 25 4
gpt4 key购买 nike

是否有一种传统的方法来编写程序,以便可以在没有 repl 的情况下从命令行向程序发出命令?例如,如何将命令发送到正在运行的 nginx服务器使用 sudo /etc/init.d/nginx restart (或除 restart 之外的任何其他有效命令)

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

这样做的正确方法是什么?

最佳答案

两种方式都可以,你甚至可以考虑使用一些 RPC机器,例如使您的应用程序服务JSONRPC在一些 unix(7) socket 。或使用 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 上运行的循环像 socket 或先进先出。当心讨厌 code injection .

关于sockets - 向正在运行的进程发送命令的传统方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com