从另一个程序或终端中断正在运行的c ++程序

时间:2015-08-29 09:33:46

标签: c++ service daemon signal-handling

我编写了一个具有无限循环的c ++程序。我想在linux中将此程序作为守护程序(或服务)运行。

我想从程序外部(例如控制台或其他程序)与此运行守护程序进行通信。

我在c ++中读到了信号处理,显然有一些预定义的信号。有没有办法将自己的信号发送到正在运行的程序?

2 个答案:

答案 0 :(得分:2)

信号很可能不是你真正想要与恶魔进程通信的内容,除非你想以特定的方式终止它。

同样不,您无法定义自己的任意信号编号,因为操作系统需要知道它们如何发送到进程。正如我的评论中所提到的,SIGUSR1SIGUSR2旨在用于用户定义的信令目的。

让外部进程与恶魔进程通信的最简单方法是给它一个配置文件,让恶魔使用inotify()界面监视更改。

这种技术也已被许多系统恶魔使用。

答案 1 :(得分:1)

您可以使用一个进程中的kill(pid, signal)向另一个进程发送信号。发送SIGKILL会猛烈地立即终止您的过程。

信号仅限于他们所表达的内容 - 您可以通过访问信号手册的第7页找到它。某些信号可以被忽略/处理/阻止,而其他信号则不能。

如果您想要真正的自定义进程间通信,您应该使用管道甚至套接字(不良做法)。这样,你就必须定义自己的协议,你可以做很多事情而不是信号。

这是一个关于如何使用命名管道向正在运行的进程发送数据的教程:http://www.linuxjournal.com/content/using-named-pipes-fifos-bash