sigkill 不会终止 C 程序

kek*_*kek 1 c linux signals

我的印象是sigkill总是有效?我的程序中有一个信号处理程序,当您按 Ctrl-C 时,它会显示退出提示。这工作得很好,但是当我通过命令行杀死时如何让它工作?现在,kill 命令没有执行任何操作。我是否应该在我的代码中实现一些东西来使kill工作?

Jon*_*ler 5

您不能设置信号处理程序SIGKILL

\n\n

您的进程没有机会响应SIGKILL。立即单方面终止;该进程无法进行任何清理。操作系统释放分配给它的资源,就像释放任何其他死进程一样。

\n\n

请参阅 POSIX Signal Concepts、 and sigaction()、 and (最特别的是)<signal.h>\xe2\x80\x94 ,其中表示SIGKILLSIGSTOP不能被捕获或忽略。

\n\n
\n\n

OTOH,你说“我怎样才能做到这一点,这样当我通过命令行杀死它时它也能工作”。你打算怎么杀掉它?假设您的 PID 位于 中$pid,则:

\n\n
kill $pid\n
Run Code Online (Sandbox Code Playgroud)\n\n

发送一个SIGTERM信号,可以通过指定来控制发送哪个信号。该Control-C键通常发送SIGINT,通常为 2 号信号。从键盘发送的其他信号是SIGQUIT( Control-\\) 或各种作业控制信号。

\n\n

如果您使用:

\n\n
kill -INT $pid\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后它会SIGINT向进程发送一个中断 ( ) (就像那样kill -2 $pid)。默认值相当于kill -TERM $pid. 您可以SIGKILL使用以下之一发送:

\n\n
kill -KILL $pid\nkill -9 $pid\n
Run Code Online (Sandbox Code Playgroud)\n