在How can I add signal handlers to a shell written in Py3k/Python?,我有信號處理程序似乎行動,然後讓默認行動通過。對於具體實例,如果我點擊control-Z,它將顯示信號處理程序指定的消息,然後(不需要的)繼續執行以暫停該進程。在Py3k中,我有一個信號處理程序如何防止信號的默認動作?
如何(如果可能的話)顯示消息,然後忽略信號?
在How can I add signal handlers to a shell written in Py3k/Python?,我有信號處理程序似乎行動,然後讓默認行動通過。對於具體實例,如果我點擊control-Z,它將顯示信號處理程序指定的消息,然後(不需要的)繼續執行以暫停該進程。在Py3k中,我有一個信號處理程序如何防止信號的默認動作?
如何(如果可能的話)顯示消息,然後忽略信號?
您的按鍵可能會提高SIGSTOP
而不是SIGSTP
。 在您的終端中運行stty -a
以確定分配給ctrl+z
的確切信號。
根據維基百科(也可能是人的網頁了)SIGSTP
and SIGSTOP
are different。 SIGSTP
被髮送到進程,因此可以截獲,而SIGSTOP
被OS拾取,因此不能被攔截。
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!
(設置控制-Z似乎沒有工作SIG_IGN處理程序。) – JonathanHayward