1
如果我們註冊一個信號如下,這是否會覆蓋另一個註冊信號處理程序,這是最後一個勝利?如果是這樣,有沒有辦法讓每個信號超過1。爲特定信號註冊信號處理程序是否會覆蓋另一個註冊信號?
signal(SIGABRT, SignalHandler);
如果我們註冊一個信號如下,這是否會覆蓋另一個註冊信號處理程序,這是最後一個勝利?如果是這樣,有沒有辦法讓每個信號超過1。爲特定信號註冊信號處理程序是否會覆蓋另一個註冊信號?
signal(SIGABRT, SignalHandler);
不是;每個信號只能有一個信號處理器。
另請注意,嘗試在信號處理程序中做任何事情都是不可能的。你不能進行任何系統調用,不能真正分配內存,並且不能使用Objective-C。
同樣,試圖捕捉SIGABRT是徒勞的。在發送的時候,這表明你的應用已經進入雜草了。試圖從這樣的狀態中恢復過來是脆弱的。
你想做什麼?
我們在內存中存儲有關正在發送/接收的數據的狀態。偶爾,我們會得到一個意外的字節序列,然後在我們的讀取中下載。我們認爲,如果我們能夠在崩潰後記錄狀態並附加到崩潰報告中,這可能有助於解決問題。 – tjg184
這是關於信號最合理的使用,但即使這樣也很脆弱。更好的辦法是檢測並記錄意外的字節序列。更好,也更容易。 – bbum
同意。這可能是我們打算做的。再次感謝! – tjg184