Linux中的kill
函数是否同步?比方说,我以编程方式调用kill
函数来终止进程,它只会在预期进程终止时返回,或者它只是发送信号并返回。如果是这种情况,我怎样才能让它等待预定的进程被杀死?
答案 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)
man 2 kill
man wait
有关Unix信号的更多详细信息,另请参阅man 7 signal
。