我的印象是sigkill总是有效?我的程序中有一个信号处理程序,当您按 Ctrl-C 时,它会显示退出提示。这工作得很好,但是当我通过命令行杀死时如何让它工作?现在,kill 命令没有执行任何操作。我是否应该在我的代码中实现一些东西来使kill工作?
您不能设置信号处理程序SIGKILL。
您的进程没有机会响应SIGKILL。立即单方面终止;该进程无法进行任何清理。操作系统释放分配给它的资源,就像释放任何其他死进程一样。
请参阅 POSIX Signal Concepts、 and sigaction()、 and (最特别的是)<signal.h>\xe2\x80\x94 ,其中表示SIGKILL和SIGSTOP不能被捕获或忽略。
OTOH,你说“我怎样才能做到这一点,这样当我通过命令行杀死它时它也能工作”。你打算怎么杀掉它?假设您的 PID 位于 中$pid,则:
kill $pid\nRun Code Online (Sandbox Code Playgroud)\n\n发送一个SIGTERM信号,可以通过指定来控制发送哪个信号。该Control-C键通常发送SIGINT,通常为 2 号信号。从键盘发送的其他信号是SIGQUIT( Control-\\) 或各种作业控制信号。
如果您使用:
\n\nkill -INT $pid\nRun Code Online (Sandbox Code Playgroud)\n\n然后它会SIGINT向进程发送一个中断 ( ) (就像那样kill -2 $pid)。默认值相当于kill -TERM $pid. 您可以SIGKILL使用以下之一发送:
kill -KILL $pid\nkill -9 $pid\nRun Code Online (Sandbox Code Playgroud)\n