为何父进程执行kill(pid,SIGTERM)终止的是子进程而非自身?
原因解释
这是fork()调用的返回值特性和代码分支逻辑共同决定的:
fork()调用成功后会生成两个独立运行的进程,父子进程拿到的fork()返回值完全不同:- 父进程拿到的返回值是子进程的PID(正整数)
- 子进程拿到的返回值是0
- 你代码里的
kill(pid, SIGTERM)写在else分支中,只有pid != 0时才会执行,也就是只有父进程会运行这段代码。此时父进程中pid变量存的就是子进程的PID,调用kill传入这个参数,自然是向子进程发送终止信号,终止的就是子进程。 - 子进程只会进入
if(pid == 0)的分支,死循环打印Child,根本不会执行到kill相关的代码。
内容的提问来源于stack exchange,提问作者wthr
相关产品推荐
相关产品推荐

