【问题标题】:Stopping a daemon in C在 C 中停止守护进程
【发布时间】:2012-04-24 02:53:07
【问题描述】:

我的信号处理程序如下所示:

volatile sig_atomic_t loop     = 1;

void handle()
{
    loop = 0;
}

而且,我有一个守护进程,就像:

void _start_()
{
...
sa.sa_handler = handle;
sigaction(SIGINT, &sa, NULL);
while(loop)
{
   //add a line to a file
}
...
}

我想stop 守护进程,来自另一个函数,例如:

void _stop_()
{
    raise(SIGINT);
}

我的想法是,不知何故,如果loop 的值为0,那么while 将被评估为假,并且守护程序退出。 我打算使用这两个功能,例如:

_start_(); //daemon starts
//computation
_stop_() //daemon stops writing to the file. exits

我怎样才能做到这一点?问题是我无法从_stop_() 停止守护进程。

谢谢

【问题讨论】:

  • 你试过用调试器查看程序吗?

标签: c process signals


【解决方案1】:

_stop() 函数是从与您的守护进程不同的进程调用的吗?如果是这样,那么它需要知道要发出信号的进程的 ID。通常的做法是守护进程将其进程 ID 写入一个文件(PID 文件),该文件可由停止守护进程的进程读取。

【讨论】:

  • 我已经更新了这个问题。 _start_() 函数是一个守护进程,_stop_() 函数试图通过发出信号来停止守护进程。
  • “通常的做法是守护进程将其进程 ID 写入一个文件(PID 文件),该文件可由停止守护进程的进程读取。” - 所以你打算让我读取 pid,然后从 _stop_() 我只需要读取然后杀死 pid?