【问题标题】:Interacting with Application while it's running in C在 C 中运行时与应用程序交互
【发布时间】:2011-05-17 22:56:15
【问题描述】:

我一直在寻找这个问题的答案。我编写了一个小型、轻量级的服务器,它运行得很好。那里没有问题;但是,在应用程序实际运行时,我想对它做一些事情。例如:server stop 明显停止服务器。

也许我应该考虑为我的服务器制作一个守护进程?它运行的平台是 Linux,我无意移植到非 POSIX 平台,所以这里不涉及 Windows。

但是是的,总结一下我的问题:如何让我的应用程序从外部(例如命令行或其他应用程序)接收“参数”或“任务”

提前欢呼,因为我知道 StackOverflow 随时准备好提供可靠、快速的答案,

/杰西

【问题讨论】:

    标签: c daemon signals


    【解决方案1】:

    有多种选择。一种流行的解决方案是使用 POSIX 风格的signals。基本上你安装一个信号处理程序并对信号做出反应。

    如果这太简单了(因为例如你需要接受参数),你也可以让你的守护进程打开一个套接字来监听命令。然后编写一个小帮助程序来向套接字发送命令。你也可以使用命名管道做类似的事情。

    基本上您要查找的内容称为Inter-process communication (IPC)。维基百科页面可能会为您指明正确的方向。

    【讨论】:

    • 谢谢,这正是我需要的。 :-)
    【解决方案2】:

    您可能有兴趣研究Signal Handling,这是Apache web server use to handle requests like this 等应用程序的常用方法。

    【讨论】:

      【解决方案3】:

      在 POSIX 平台上,控制正在运行的应用程序的一种简单方法是使用 信号。例如,您可以为 SIGUSR1 信号编写一个处理程序,该处理程序在您的服务器上下文中执行特定操作。你可以这样发送信号:

      kill -SIGUSR1 $pid
      

      $pid 是您正在运行的服务器的 pid。信号方法的一个限制是没有任何直接的方法可以将任何其他信息与信号一起发送。但是,服务器可以间接地通过重新加载配置文件来对信号采取行动。

      对于更复杂的控制,控制正在运行的服务器的另一种方法是在其中嵌入一个简单的 Web 服务器。例如,如果您将该 Web 服务器设置为侦听端口 8080,则可以通过转到

      http://localhost:8080/
      

      在您的浏览器中。这种方法可以实现近乎无限的监视和控制可能性。

      【讨论】:

        【解决方案4】:

        一些答案​​,从简单到复杂:

        • 使用信号(3) 处理程序。就是为了这个目的做某事。 kill(1) 命令将从外部传输信号。
        • 监控文件的更改并检查其中的内容,根据其中的内容做一些事情
        • 使用允许其他应用程序与您通信的 IPC 协议。广泛的主题,在网络上广泛讨论。
        • 使其成为可以通过 TCP/UDP 发送命令的客户端/服务器架构。

        【讨论】:

        • 请注意,第 2 点(使用文件)虽然实现起来相对简单,但由于竞争条件(读取半成品文件等),要正确处理可能会很棘手。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 2018-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2019-03-29
        相关资源
        最近更新 更多