上.Archlinux64
VirtualBox
如果我像这样声明一个 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