【问题标题】:c daemon runtime shell parametersc 守护进程运行时 shell 参数
【发布时间】:2015-10-07 05:19:55
【问题描述】:

我会开发一个可以通过 shell 命令控制的守护进程。 只是为了澄清让我们说守护程序将具有三个功能(我想要的调用):

$ myDaemon start #什么都不做,只是守护进程。 exit(0) 成功,exit(1) 否则

$ myDaemon stop #请求守护进程停止。 exit(0) 成功,exit(1) 否则

$ myDaemon doSomething #询问守护进程。 exit(0) 成功,exit(1) 否则(假设守护进程执行 int a = 0; exit(0); 只是为了看代码,对特殊内容不感兴趣)

谁能给我一个关于如何产生这个守护进程的例子(好的,开始真的很简单......)?

谢谢大家!

【问题讨论】:

  • 谢谢菲利普,但你指出的这个有用的指南(无论如何真的很好)没有回答我的问题。我需要像“$ myDaemon doSomething”这样的东西我需要一种机制来传递给我的守护进程命令并等待答案(IPC)。
  • 命令行参数可能会起作用:gnu.org/software/libc/manual/html_node/…。如果您希望您的程序接受输入,做某事,然后返回结果并退出,那么您实际上并不是在看一个守护进程,而是一个接受输入并吐出输出的普通 jane 常规程序。您确定需要程序在后台持续运行吗?

标签: c ipc daemon


【解决方案1】:

如果你真的想让守护进程完成所有工作,那么一种方法是编写一个终端程序,通过某种 IPC 技术将所有命令从终端传递给守护进程。

你所要做的就是:

  • 编写一个终端程序,它分叉然后执行守护程序以及命令行参数(如使用管道的文件描述符)。
  • 然后,终端程序从终端获取 while 循环中的输入,并通过正在使用的 IPC 机制将它们传递给守护程序。

编辑

主进程算法

main()
{
    > fork the daemon with some initial arguments(if any)
    while(1)
    {
        > take inputs from the shell
        > parse the input and pass it to daemon(via preferred mechanism)
        > if(exit condition) kill->daemon and break
    }
}

对于守护进程

main() (or function_name() if no execl)
{
    > initialize the arguments and IPC mechanism
    while(1)
    {
        > read command(can use simple integer/character commands)
        > perform requested action or break if exit command
    }
    > proper exit(closing file descriptors,etc.)
}

【讨论】:

  • 谢谢拉胡尔。守护进程已准备就绪。我喜欢以这种方式使用的东西: 1) $ myDaemon # 它开始,它分叉,我回到 schell 2) $ .... k) $ myDaemon doSomething # 它已经处于活动状态(通过 1 ) 但是当主进程完成并且分叉的进程处于活动状态时,我可以向它传递一些命令 k+1) ...
  • 谢谢拉胡尔。守护进程已准备就绪。我喜欢以这种方式使用的东西: 1) $ myDaemon # 它开始,它分叉,我回到 schell k) $ myDaemon doSomething # 它已经处于活动状态(通过 1)但我可以传递给它当主进程完成并且分叉的进程处于活动状态时的一些命令 j) $ myDaemon stop # 命令守护进程停止 怎么说,我认为这很简单:我解析参数,如果“开始”,我创建守护进程并退出,如果“停止”我可以杀死守护进程,如果“做某事”我可以通过 TCP/IP 向守护进程发送消息..(但不是通过 TCP)
  • 我已经包含了算法,如果有帮助的话。
猜你喜欢
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 2014-07-17
  • 2011-02-13
  • 2014-07-03
相关资源
最近更新 更多