2

Py3k/Python で書かれたシェルにシグナル ハンドラを追加するにはどうすればよいですか? 、動作しているように見えるシグナルハンドラーがあり、デフォルトのアクションを通過させました。具体的な例として、control-Z を押すと、シグナル ハンドラーによって指定されたメッセージが表示され、(望ましくない) プロセスが中断されます。

どのように (可能であれば) メッセージを表示し、それ以外の場合はシグナルを無視しますか?

4

2 に答える 2

0

キーを押すSIGSTOPと、SIGSTP. ターミナルで実行stty -aして、に割り当てられている正確なシグナルを決定しctrl+zます。

ウィキペディア(およびおそらくマニュアルページも)によるSIGSTPと、 とSIGSTOPは異なります。 SIGSTPはプロセスに送信されるため傍受できますがSIGSTOP、OS によって取得されるため傍受できません。

于 2012-11-10T18:39:40.533 に答える
0

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!
于 2012-11-10T18:43:00.357 に答える