我想在我的程序中捕捉SIGTERM,這是問題所在。c + + SIGTERM捕獲後不返回
我的程序啓動並設置信號SIGTERM的偵聽器。然後程序進入一個循環,它使用select連續檢查一個套接字文件描述符,以便它不被阻塞。當我通過kill發送程序TERM時,程序確認它接收到信號,但是這不會返回到我先前描述的循環。
信號處理程序在類中設置一個公共變量,以便循環知道要退出。我應該提到,在gdb中這可以工作,但不在gdb之外。
在此先感謝。
class A
{
public:
bool volatile stop;
void loop();
{
while(!stop)
{
//check socket
}
}
};
A *aptr;
void sigterm_handler(int i)
{
aptr->stop = true;
}
int main()
{
A a;
aptr = &a;
struct sigaction sa;
sa.sa_handler = &sigterm_handler;
sigaction(SIGTERM, &sa, NULL);
a.stop = false;
a.loop();
}
編輯:對不起沒有完成正確的代碼。
你發佈的代碼存在問題:'stop'沒有被初始化,'loop()'沒有被調用。 – 2011-05-17 12:29:39
你可能想讓停止不穩定。 – 2011-05-17 12:38:50
你使用哪個平臺和哪個編譯器標記?問一個簡單的'g ++ -o test test.cpp'(你的文件是test.cpp),這對我有效,但如果我添加了一個優化標誌,比如'g ++ -O2 -o test test.cpp',那麼你將需要採取@linuts的答案,這是爲了使其工作,使「停止」易失性。 – Jason 2011-05-17 12:46:01