2011-07-10 74 views
0

我正在使用Linux。
我寫了一個在發送SIGSEGV時調用的函數。在linux中捕獲信號

我通過從命令提示符kill -SIGSEGV pid發送來檢查我的程序。
我此話,當我的程序是不是新的以太網輸入查詢,它不趕的信號,並輸入「殭屍狀態」,即它不寫什麼日誌文件...

是否有邏輯解釋爲什麼程序不會總是捕獲信號?

+1

SIGSEGV是一個信號。混合術語信號和中斷。 – flolo

+1

1.直言不諱,SIGSEVG是*信號* - 中斷是一種完全不同的動物,很少與用戶空間程序有任何關係。 2.我確信有一個合理的解釋,但是你在困難的時候抓住了我們 - 我們都把我們的水晶球留在了家中,沒有他們我們就看不到你的代碼。 – thkala

+0

我無法發佈代碼(數千個文件...)。這就是爲什麼我要求一個邏輯解釋。 – DavidBobo

回答

0

您可以創建一個只會偵聽SIGSEVG信號的線程,另一個線程只會輪詢新的Internet輸入。

這樣,您的程序在輪詢新的以太網輸入時不會「錯過」SIGSEVG信號。

+0

信號,特別是SIGSEGV,不是程序可以忽略的東西,不管它在做什麼...... – thkala

+0

信號是線程相關的嗎? – DavidBobo

+0

@thkala通過這種方式,輪詢工作可以委託給一個線程,而主程序將只關注其他活動和SIGSEVG處理。 – Stephan