杀戮功能同步吗?

时间:2012-01-06 17:57:02

标签: c linux gcc x86

Linux中的kill函数是否同步?比方说,我以编程方式调用kill函数来终止进程,它只会在预期进程终止时返回,或者它只是发送信号并返回。如果是这种情况,我怎样才能让它等待预定的进程被杀死?

4 个答案:

答案 0 :(得分:19)

不,因为它不会杀死任何东西,它只会向进程发送一个信号。

默认情况下,此信号甚至可以被阻止或忽略。

您无法阻止代表发送kill -9

SIGKILL

等待进程死亡:

while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done

答案 1 :(得分:4)

kill无法同步,因为它只发送信号。目标进程可能会忽略传入的信号(参见SIG_IGN),因此无法保证kill的效果。

进行一项验证这一假设的实验应该不难。在死亡之前,启动过程A并使其处理SIGTERM并进行10秒睡眠。然后启动进程B,它将SIGTERM传递给A并立即退出。

答案 2 :(得分:3)

kill系统调用不会等待其他进程执行任何操作。信号将发布到目标进程,系统调用将返回。目标进程会在计划运行时通知该信号。

答案 3 :(得分:2)

  1. 否。 man 2 kill
  2. man wait
  3. 有关Unix信号的更多详细信息,另请参阅man 7 signal