在C中停止守护进程

时间:2012-04-24 02:53:08

标签: c process signals

我的信号处理程序如下:

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将被评估为false,并且守护进程退出。 我打算使用这两个函数,如:

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

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

由于

1 个答案:

答案 0 :(得分:2)

是否从守护进程的单独进程调用了_stop()函数?如果是这样,那么它需要知道要发信号的进程的ID。通常的做法是守护进程将其进程ID写入文件(PID文件),该文件可以由停止守护进程的进程读取。