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

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

有些 Linux 程序(例如 vlc)建议在终端中键入ctrl+c两次以终止其执行(如果程序在第一次执行后没有停止)。

为什么输入ctrl+c两次可以工作,而第一次却不起作用?

答案1

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

显然,虚拟LC安装一个信号处理程序,在第一次调用时尝试执行一些清理/正常终止,并在第二次调用时恢复到立即终止执行的默认行为。

答案2

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

如果第二个Ctrl+C没有杀死程序,请尝试Ctrl+ \,它会发送信号退出,一个更猛烈的信号(但仍然可以捕捉到的信号),或者尝试Ctrl+Z暂停程序然后是kill命令(例如kill %1发送信号术语,传统上比 SIGQUIT 更不剧烈的信号,针对作业号 1)。如果所有其他方法均失败,请使用 来终止程序kill -KILL(也称为 )kill -9,发送无法捕获的信号信号杀死

相关内容