Py3k/Python で書かれたシェルにシグナル ハンドラを追加するにはどうすればよいですか? 、動作しているように見えるシグナルハンドラーがあり、デフォルトのアクションを通過させました。具体的な例として、control-Z を押すと、シグナル ハンドラーによって指定されたメッセージが表示され、(望ましくない) プロセスが中断されます。
どのように (可能であれば) メッセージを表示し、それ以外の場合はシグナルを無視しますか?
Py3k/Python で書かれたシェルにシグナル ハンドラを追加するにはどうすればよいですか? 、動作しているように見えるシグナルハンドラーがあり、デフォルトのアクションを通過させました。具体的な例として、control-Z を押すと、シグナル ハンドラーによって指定されたメッセージが表示され、(望ましくない) プロセスが中断されます。
どのように (可能であれば) メッセージを表示し、それ以外の場合はシグナルを無視しますか?
キーを押すSIGSTOP
と、SIGSTP
. ターミナルで実行stty -a
して、に割り当てられている正確なシグナルを決定しctrl+z
ます。
ウィキペディア(およびおそらくマニュアルページも)によるSIGSTP
と、 とSIGSTOP
は異なります。
SIGSTP
はプロセスに送信されるため傍受できますがSIGSTOP
、OS によって取得されるため傍受できません。
CTRL-Z は合図ではなく、キーの組み合わせです。Windows では、CTRL-Z はEOFを送信しますが、これもシグナルではありません。ほとんどの Unix シェルは CTRL-Z でシグナル、つまり SIGTSTP シグナルを送信するため、Unix を意味していると思います。
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!