为什么在 Linux 中输入 Ctrl+c 两次会停止正在运行的进程?

719*_*016 24 kill signals

有一些 Linux 程序,例如 vlc,如果程序在第一个之后没有停止,则建议键入ctrl+c两次以从终端终止它们的执行。

为什么在第一次不起作用时键入ctrl+c两次会起作用?

Ric*_*rri 36

它所做的完全是特定于应用程序的。当您按下ctrl+ 时c,终端模拟器会向前台应用程序发送一个SIGINT信号,从而触发相应的“信号处理程序”。SIGINT 的默认信号处理程序终止应用程序。但是任何程序都可以为 SIGINT 安装自己的信号处理程序(包括根本不停止执行的信号处理程序)。

显然,vlc安装了一个信号处理程序,它尝试在第一次调用时进行一些清理/正常终止,并在第二次调用时回退到立即终止执行的默认行为。

  • 在某些系统上,信号在调用处理程序后恢复为 SIG_DFL(以避免在同一信号上两次调用处理程序);这称为 SysV 语义。许多程序不会在处理程序结束时将信号处理程序设置回原始的程序设置。这通常是一个编程错误。在 [signal(2) 联机帮助页](http://www.kernel.org/doc/man-pages/online/pages/man2/signal.2.html) 上阅读更多信息。 (3认同)

Gil*_*il' 17

SIGINT是由Ctrl+发送的信号C,通常告诉程序进入其主命令处理循环,或者如果这没有意义,则干净地退出。某些程序在收到 SIGINT 时会运行清理过程。如果程序混乱到清理程序失败,在某些程序中,第二个Ctrl+C会导致程序立即退出。这取决于每个程序作者。

如果第二个Ctrl+C不杀死该程序,尝试Ctrl+ \,它发送SIGQUIT,更猛烈的(但仍然开捕信号)或尝试Ctrl+Z暂停程序,随后的kill命令(例如kill %1,它发送SIGTERM,以往不太剧烈信号比 SIGQUIT,工作号 1)。如果所有其他方法都失败了,请使用发送无法捕获的信号SIGKILL 来终止程序kill -KILL,也称为。kill -9