2012-11-10 37 views
2

How can I add signal handlers to a shell written in Py3k/Python?,我有信號處理程序似乎行動,然後讓默認行動通過。對於具體實例,如果我點擊control-Z,它將顯示信號處理程序指定的消息,然後(不需要的)繼續執行以暫停該進程。在Py3k中,我有一個信號處理程序如何防止信號的默認動作?

如何(如果可能的話)顯示消息,然後忽略信號?

+0

(設置控制-Z似乎沒有工作SIG_IGN處理程序。) – JonathanHayward

回答

0

您的按鍵可能會提高SIGSTOP而不是SIGSTP。 在您的終端中運行stty -a以確定分配給ctrl+z的確切信號。

根據維基百科(也可能是人的網頁了)SIGSTP and SIGSTOP are differentSIGSTP被髮送到進程,因此可以截獲,而SIGSTOP被OS拾取,因此不能被攔截。

0

CTRL-Z不是一個信號,它是一個關鍵組合。在Windows上,CTRL-Z將發送一個EOF,這也不是一個信號,所以我認爲你的意思是在Unix上,因爲大多數Unix shell會在CTRL-Z上發送一個信號,即SIGTSTP信號。

更改爲SIGTSTP處理程序正常工作:

>>> import signal 
>>> def handler(signum, frame): 
... print(signum, frame, "yay!") 
... 
>>> signal.signal(signal.SIGTSTP, handler) 
0 
<Here I press CTRL-Z> 
>>> 20 None yay!