spr*_*aff 5 shell kill signals tty
我可以通过按下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
Run Code Online (Sandbox Code Playgroud)
让我引起你的注意
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; [...]
Run Code Online (Sandbox Code Playgroud)
其中两个看起来很熟悉:^C
and ^D
,看起来^U
应该发送 sigkill,我认为应该像kill -9
.
在我的特殊情况下,我想杀死 ddd,否则有时很难关闭。如果我crtl+u
从 shell 中,它没有任何影响,尽管kill -9
在它的 PID 上会杀死它。
我在解释这个输出时错了stty -a
吗?应该ctrl+u
发送 SIGKILL 吗?为什么这没有按预期工作?或者,我如何方便地从 shell(即启动 ddd 的 shell)发送 SIGKILL ?
那杀戮是为了暗杀,而不是为了信号而死。它应该记录在termios(4)
手册页中,
当接收到两个特殊字符 ERASE 和 KILL 字符(参见特殊字符部分)中的任何一个时,就会发生擦除和终止处理。此处理会影响输入队列中尚未由换行符 NL、EOF 或 EOL 字符分隔的数据。这个未定界的数据构成了当前行。ERASE 字符删除当前行中的最后一个字符(如果有)。KILL 字符删除当前行中的所有数据(如果有)。
或termios(3)
在 linux 上
VKILL (025, NAK, Ctrl-U, or Ctrl-X, or and @) 杀死字符 (KILL)。这会擦除自最后一个 EOF 或行首以来的输入。设置 ICANON 时识别,然后不作为输入传递。