Is kill function synchronous?

2020-03-09 07:19发布

Is the kill function in Linux synchronous? Say, I programatically call the kill function to terminate a process, will it return only when the intended process is terminated, or it just sends the signal and return. If that is the case, how can I make it wait for the intended process to be killed?

标签: c linux gcc x86
4条回答
啃猪蹄的小仙女
2楼-- · 2020-03-09 07:38

kill cannot be synchronous as it only sends a signal. The target process might ignore incoming signals (cf. SIG_IGN) so there's no guarantee regarding kill's effect.

It shouldn't be difficult to make an experiment verifying this hypothesis. Start process A and make it handle SIGTERM with a 10 second sleep before dying. Then start process B, which delivers a SIGTERM to A and exits immediately.

查看更多
Emotional °昔
3楼-- · 2020-03-09 07:55

The kill system call does not wait for the other process to do anything. The signal is posted to the target process and the system call returns. The target process notices the signal when it is scheduled to run.

查看更多
家丑人穷心不美
4楼-- · 2020-03-09 07:56

No, since it doesn't kill anything, it only sends a signal to the process.

By default this signal can even be blocked or ignored.

You can't block kill -9 which represents sending SIGKILL

To wait for the process to die:

while kill -0 PID_OF_THE_PROCESS 2>/dev/null; do sleep 1; done
查看更多
倾城 Initia
5楼-- · 2020-03-09 07:57
  1. No. man 2 kill
  2. man wait

See also man 7 signal for more details about Unix signals.

查看更多
登录 后发表回答