用C停止守护进程

问题描述:

我的信号处理程序是这样的:用C停止守护进程

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_()停止守护进程。

感谢

+0

您是否试图用调试器查看程序? – 2012-04-24 03:06:17

+0

请您详细说明一下吗? – Sayan 2012-04-24 03:31:05

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

+0

我已经更新了这个问题。 '_start _()'函数是一个守护进程,'_stop _()'函数试图通过产生一个信号来停止守护进程。 – Sayan 2012-04-24 03:33:39

+0

“通常的做法是守护进程将其进程ID写入文件(PID文件),该文件可以被停止守护进程的进程读取。” - 那么你是否打算我可以读取pid,然后从'_stop _()'我只需要读取然后杀掉pid? – Sayan 2012-04-24 03:35:12

+0

“我只需要阅读然后杀死pid?”是。 – 2012-04-24 03:40:59