OS X 与 Linux 中的命令行中断

OS X 与 Linux 中的命令行中断

偶尔,当我在 Mac 上进行开发时,会遇到进程挂起的情况。发生这种情况时,我会尝试以下方法:

  1. Ctrl+C在活动终端窗口中
  2. 如果什么都没发生,我会打开一个新的终端窗口并执行kill -SIGTERM {PID}
  3. 如果仍然没有结果,请关闭终端窗口。

我遇到过这种情况:在执行 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

即使这样也不一定总是有效。如果有一些输入/输出错误,例如缺少设备。

相关内容