在C中运行时与Application交互

时间:2011-05-17 22:56:15

标签: c daemon signals

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

也许我应该考虑为我的服务器制作一个守护进程?它运行的平台是Linux,我无意移植到非POSIX平台,因此Windows与此无关。

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

提前干杯,因为我知道StackOverflow随时准备着一个坚实,快速的答案,

/杰西

4 个答案:

答案 0 :(得分:3)

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

如果这太简单了(因为你需要接受参数),你也可以让你的守护进程打开一个监听命令的套接字。然后编写一个小助手程序将命令发送到套接字。您也可以使用命名管道执行类似操作。

基本上你要找的是Inter-process communication(IPC)。维基百科页面可能会指向正确的方向。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

kill -SIGUSR1 $pid

其中$pid是正在运行的服务器的pid。信号方法的局限性在于没有任何直接的方式来发送任何其他信息以及信号。但是,间接服务器可以通过重新加载配置文件来处理信号,例如。

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

与之通信
http://localhost:8080/

在浏览器中。该方法允许几乎无限的监视和控制可能性。

答案 3 :(得分:1)

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

  • 使用signal(3)处理程序。为此目的做某事。 kill(1)命令将从外部发送信号。
  • 监控文件的变化并检查其中的内容,根据其中的内容执行某些操作
  • 使用允许其他应用程序与您通信的IPC协议。广泛的主题,在网上广泛讨论。
  • 使其成为客户端/服务器架构,可以通过TCP / UDP发送命令。