杀死不响应SIGINT,SIGQUIT的终端附加过程

时间:2012-01-18 21:32:53

标签: linux unix

有时Ctr-C(SIGINT)和Ctrl-\(SIGQUIT)都太弱了。有没有办法使用快速键盘快捷键对当前附加的进程进行更激进的杀戮(例如kill -9)?

3 个答案:

答案 0 :(得分:0)

如果您遇到特定命令无法响应CTRL-C的问题(因为它忽略了SIGINT,,因为它要求终端驱动程序不再将其识别为中断字符),可以尝试将其包装在rlwrap

rlwrap -a -I <command>
当您按CTRL-C并将SIGTERM发送到rlwrap时,

<command>将捕获终端驱动程序发送的SIGINT。

当然,<command>可能会捕获甚至忽略SIGTERM,但许多忽略SIGINT的命令都会响应SIGTERM - 同时仍然可以在终止之前进行清理,这与您发生的情况形成对比使用SIGKILL(kill -9

答案 1 :(得分:0)

如果您是zsh用户,可以SIGTERM

.zshrc发送function terminate-current-job() { kill -s TERM %+ ; } zle -N terminate-current-job terminate-current-job bindkey "^T" terminate-current-job
{{1}}

CTRL T 绑定到先前定义的小部件/函数。

答案 2 :(得分:0)

就像在其他答案中提出的那样,您可以尝试通过捕获其他一些信号来终止进程。也可以使用trap command

中内置的linux bash来完成此操作

用于在Shell收到任何信号时执行命令

要在捕获到SIGINT(CTRL-C)后杀死可执行文件,您需要像这样启动它:

yourexecutable & pid=$! ; trap 'echo KILL ; kill -9 $pid' INT ; echo WAIT $pid ; wait $pid ; echo DONE

请注意,回声仅用于调试目的,如果您不需要它们,可以将其删除。