2011-05-17 33 views
3

我一直在寻找这个问题的答案一段时间了。我写了一个小型轻量级服务器,它运行得很好。那里没有问题;然而,在应用程序正在运行时,我想要处理一些事情。例如:server stop明显停止服务器。在C运行时与应用程序交互

也许我应该看看为我的服务器做守护进程?它运行的平台是Linux,我不打算移植到非POSIX平台,所以Windows在这里并不相关。

但是,是的,总结一下我的问题:如何让我的应用程序收到的论点'或“任务”从外部(例如命令行,或不同的应用程序)

干杯提前,如我知道StackOverflow上随时准备为坚实,快速回答,

/杰西

回答

3

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

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

基本上你在找什么叫做Inter-process communication(IPC)。维基百科页面可能会为您指出正确的方向。

+0

谢谢,这是我所需要的。 :-) – 2011-05-17 23:21:25

1

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

kill -SIGUSR1 $pid 

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

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

http://localhost:8080/ 

在浏览器中。该方法允许接近无限的可能性进行监视和控制。

1

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

  • 使用信号(3)处理。意思是为了这个目的去做一些事情。 kill(1)命令将传输来自外部的信号。
  • 监视一个文件的变化,并检查里面有什么,根据里面的内容做些什么
  • 使用IPC协议,允许其他应用程序与您交谈。广泛的主题,在网络上广泛讨论。
  • 使其成为可通过TCP/UDP发送命令的客户端/服务器体系结构。
+0

请注意,第2点(使用文件)虽然实现起来相对简单,但由于竞争条件(阅读完成的文件等)可能会非常棘手。 – sleske 2011-05-18 10:28:37

相关问题