2012-11-06 116 views
2

我想在Unix中编写一个守护进程。我理解如何使守护进程运行起来。现在我希望守护进程在shell中输入命令时作出响应,如果它们是针对守护进程的。编写一个unix守护进程

例如:

让我们假设守护程序的名称是 “mydaemon”

在终端1 I型mydaemon XXX。 在终端2中输入mydaemon yyy。

“mydaemon”应该能够接收参数“xxx”和“yyy”。

+0

你的意思是你希望能够在第一次启动它时将命令传递给守护进程,或者你的意思是_after_你开始了一个守护进程,它是运行,连续调用“mydaemon”发送指令到已经运行的进程? – Matt

+0

我的意思是连续调用“mydaemon”向已经运行的进程发送指令。 – user1801900

回答

1

如果我正确解释您的问题,那么您必须将其作为应用程序级构造执行此操作。也就是说,这是您的程序特定于您自己的代码。

我会采取的方法是写“mydaemon”的想法,它是一个包装:它检查进程表或pid文件,看看“mydaemon”是否已经在运行。如果没有,那么fork/exec你的新守护进程。如果是这样,那么将参数发送给它。

对于“发送参数给它”,我会使用命名管道,如下所述:What are named pipes?实质上,您可以将命名管道想象为“stdin”,除非它们显示为文件该系统,所以你可以在运行“mydaemon”中打开它们并检查它们的输入。

最后,应该注意的是,所有这些check-if-running-send-to-pipe的东西都可以在守护程序中使用* nix OS的API来完成,或者可以在一个脚本通过使用例如'ps','echo'等...

+0

谢谢,我在这里还有一个问题,可以说我想返回新的请求“mydaemon yyy”,表示您的请求已被接受,可以在指定的管道中写入内容并在另一端读取? – user1801900

+0

我不认为一个管道可以做到这一点 - 你可以使用多个管道 - 但你可以通过使用Unix套接字http://beej.us/guide/bgipc/output/html/multipage/unixsock更好地服务。 html - 尤其是,查看描述'socketpair()'的文章结尾。使用Unix套接字更像是使用完整的网络套接字,这可能是一个优势 - 将守护进程移植为联网服务几乎是微不足道的 - 而且(如果你做得对),你的守护进程和守护进程之间的全双向异步通信任何其他程序。 – Matt