2012-04-24 117 views
0

我的信號處理程序是這樣的:用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

回答

2

是從您的守護一個單獨的進程稱爲_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