偶尔,当我在 Mac 上进行开发时,会遇到进程挂起的情况。发生这种情况时,我会尝试以下方法:
- Ctrl+C在活动终端窗口中
- 如果什么都没发生,我会打开一个新的终端窗口并执行
kill -SIGTERM {PID}
- 如果仍然没有结果,请关闭终端窗口。
我遇到过这种情况:在执行 1 和 2 之后,PID 仍然列在我的进程列表中。换句话说,似乎没有命令行选项可以终止进程 - 我所能做的就是终止终端。
在 Linux 命令行环境中,我们显然没有选项 3。那么命令行中断在那里是否以不同的方式运行?还有其他方法可以终止我忽略的进程吗?终止 Linux 进程的“最后手段”选项是什么?
答案1
与 OS X 相同:发送 SIGKILL。
答案2
您可以尝试Ctrl+ \(控制反斜杠),它发送 QUIT 信号。当 SIGINT 被捕获时,这通常有效。
有时,进程会忽略信号,因为它已停止。
你可以使用类似这样的方法来正常终止一个进程(如果可能的话):
KILL() {
kill -CONT "$@"
kill -TERM "$@"
kill -HUP "$@"
sleep 1
kill -KILL "$@"
}
KILL 12345
即使这样也不一定总是有效。如果有一些输入/输出错误,例如缺少设备。