有时当应用程序在 bash 会话中挂起时(例如网络滞后telnet
,ssh
等等),我无法使用 ^C 来杀死它,使用 ^D 来停止它,甚至无法使用 ^Z 将其发送到后台。
有没有办法不用打开另一个 shell 来杀死它kill
?我猜有一个系统调用可以中断
答案1
如果您使用的是 SSH,请尝试两个键组合:~ ^z(波浪号,然后是 control-z)。这将退出 SSH 会话。对于 telnet,也可以通过按 ^](ctrl 然后是 ])执行相同操作。
现在您可以启动一个新会话并终止有问题的进程或整个会话。这是您想要的吗?
答案2
SIGQUIT
您可以使用 Ctrl-\ 向进程发送 a,如果进程具有SIGTERM
(Ctrl-c) 或SIGSTOP
(Ctrl-z) 的信号处理程序,这种方法有时可以奏效。
如果您的进程在 I/O 系统调用上阻塞(ps 显示它处于状态 D),那么它处于不可中断的睡眠状态,您将不得不等到它等待的资源开始响应。