SIGINT (Ctrl+C) 处理程序内写入 /dev/pts/x 的数据被随机丢弃

SIGINT (Ctrl+C) 处理程序内写入 /dev/pts/x 的数据被随机丢弃

上.Archlinux64VirtualBox

如果我像这样声明一个 SIGINT 陷阱:

trap 'echo x' INT

ssh会话(正在运行bash)中并按Ctrl+C多次,只有几次终端中才会出现某些内容。这是一个更复杂的例子。按 Ctrl-c 21 次后:

[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

相关内容