2014-05-23 117 views
4

我正在調試Ubuntu 10.04的C++應用程序,它有時會收到SIGKILL信號。 我想捕獲信號,並阻止它殺死執行,只是爲了看看我能否在該時刻獲得應用程序狀態的一些有用信息。使用gdb處理信號

gdb documentation我發現handle命令,所以我試圖把它應用到SIGKILL信號:

(gdb) handle SIGKILL stop nopass 
Signal  Stop Print Pass to program Description 
SIGKILL  Yes Yes  No    Killed 

因此,我理解這個正確:

stop 
    GDB should stop your program when this signal happens. This implies the print keyword as well. 
print 
    GDB should print a message when this signal happens. 
nopass 
    GDB should not allow your program to see this signal. 

一旦SIGKILL信號被髮射,gdb應該以某種方式捕獲它,打印消息,停止執行,不要讓應用程序自殺,對吧?

問題是,這不會發生,應用程序終止。

你知道我怎麼可能抓到的信號?

有用的信息:

  • 當在另一線程中執行被髮射的信號,在運行的一段代碼。
  • GDB版本: 4.4.3
  • 克++版本: 7.1

回答

5

從UNIX 信號(7)手冊頁:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 

所以調試器可以設置處理程序,但沒有任何意義。操作系統直接執行所需的操作。如果可以從應用程序處理SIGKILL,則操作系統無法終止損壞的應用程序。出於這個原因,SIGKILL有點特殊 :-)

+0

太好了。我必須找到另一種獲取信息的方式。謝謝@克勞斯,我應該從一開始就檢查手冊頁,並讓你工作。 –