SIGINT(Ctrl + C)ハンドラ内で、/ dev / pts / xに書き込まれたデータはランダムに削除されます。

SIGINT(Ctrl + C)ハンドラ内で、/ dev / pts / xに書き込まれたデータはランダムに削除されます。

上へArchlinux64VirtualBox

次のようにSIGINTトラップを宣言すると:

trap 'echo x' INT

sshセッション(実行中)で+を数回bash押すと、端末に何かが数回表示されます。以下はより複雑な例です。 Ctrl-cを21回押した後:CtrlC

[il@vmarch ~]$ n=0; trap 'echo " $n'\’'th INT"; n=$((n+1))' INT
[il@vmarch ~]$ ^C 0’th INT

[il@vmarch ~]$ ^C 7’th INT

[il@vmarch ~]$ ^C 8’th INT

[il@vmarch ~]$ ^C 9’th INT

[il@vmarch ~]$ ^C 18’th INT

[il@vmarch ~]$ ^C 21’th INT

Ctrl+を押すだけでCこの効果が表示されます。SIGINT明示的に(経由でkill)送信すると、予想されるすべてのメッセージが届きます。複数の端末エミュレータで再現可能です。テキストコンソール(/dev/tty1)には表示されません。zshと同様の症状dash:結果はzshでほぼ同じです。ダッシュではトラップは機能しませんが、トラップがないと改行文字やプロンプトも削除されます。

Ctrl+を押す前に5〜10秒間何もしないと、Cデータが削除される可能性が高くなります。

$ uname -a
Linux vmarch.lan 4.0.4-2-ARCH #1 SMP PREEMPT Fri May 22 03:05:23 UTC 2015 x86_64 GNU/Linux

関連情報