ctrl+c
我可以通过按 shell 来中断程序。通常这会杀死程序,但有些程序会捕获信号并继续运行。
我希望能够更积极地杀死此类程序并做了一些研究。我读到它将stty -a
列出 tty 快捷方式。这是输出:
speed 38400 baud; rows 27; columns 213; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
让我提请您注意
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; [...]
其中两个看起来很熟悉:^C
和^D
,看起来^U
应该发送 sigkill ,我认为应该是这样的kill -9
。
在我的特殊情况下,我想杀死 ddd,否则有时很难关闭。如果我crtl+u
从 shell 退出,它没有任何影响,尽管kill -9
它的 PID 会杀死它。
我对这个输出的解释是错误的吗stty -a
?应该ctrl+u
发送 SIGKILL 吗?为什么这没有按预期工作?或者,我如何方便地从 shell(即启动 ddd 的 shell)发送 SIGKILL?
答案1
那次杀戮是为了人格刺杀,而不是信号致死。它应该记录在手册termios(4)
页中,
当收到两个特殊字符(ERASE 和 KILL 字符(请参阅特殊字符部分))中的任何一个时,就会发生擦除和终止处理。此处理会影响输入队列中尚未由换行符 NL、EOF 或 EOL 字符分隔的数据。这些不定界的数据构成了当前行。 ERASE 字符删除当前行中的最后一个字符(如果有)。 KILL 字符删除当前行中的所有数据(如果有)。
或者termios(3)
在Linux上
VKILL (025, NAK, Ctrl-U, 或 Ctrl-X, 或 @) 杀死字符 (KILL)。这将擦除自最后一个 EOF 或行首以来的输入。当 ICANON 设置时被识别,然后不作为输入传递。