我编写了一个具有无限循环的c ++程序。我想在linux中将此程序作为守护程序(或服务)运行。
我想从程序外部(例如控制台或其他程序)与此运行守护程序进行通信。
我在c ++中读到了信号处理,显然有一些预定义的信号。有没有办法将自己的信号发送到正在运行的程序?
答案 0 :(得分:2)
信号很可能不是你真正想要与恶魔进程通信的内容,除非你想以特定的方式终止它。
同样不,您无法定义自己的任意信号编号,因为操作系统需要知道它们如何发送到进程。正如我的评论中所提到的,SIGUSR1
和SIGUSR2
旨在用于用户定义的信令目的。
让外部进程与恶魔进程通信的最简单方法是给它一个配置文件,让恶魔使用inotify()
界面监视更改。
这种技术也已被许多系统恶魔使用。
答案 1 :(得分:1)
您可以使用一个进程中的kill(pid, signal)
向另一个进程发送信号。发送SIGKILL会猛烈地立即终止您的过程。
信号仅限于他们所表达的内容 - 您可以通过访问信号手册的第7页找到它。某些信号可以被忽略/处理/阻止,而其他信号则不能。
如果您想要真正的自定义进程间通信,您应该使用管道甚至套接字(不良做法)。这样,你就必须定义自己的协议,你可以做很多事情而不是信号。
这是一个关于如何使用命名管道向正在运行的进程发送数据的教程:http://www.linuxjournal.com/content/using-named-pipes-fifos-bash。