#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
int main(){
pid_t pid = fork();
if(pid==0){
system("watch ls");
}
else{
sleep(5);
killpg(getpid(),SIGTERM); //to kill the complete process tree.
}
return 0;
}
终端:
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ gcc test.c
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ ./a.out
Terminated
前 5 秒显示“watch ls”的输出,然后它终止,因为我发送了一个 SIGTERM。
问题:进程如何杀死自己?我已经完成了 kill(getpid(),SIGTERM);
我的假设: 所以在 kill() 调用过程中,进程切换到内核模式。kill 调用将 SIGTERM 发送到进程并将其复制到进程的进程表中。当进程返回到用户模式时,它会在其表中看到信号并自行终止(如何?我真的不知道) (我认为我的假设某处出错了(可能是一个错误)......所以请开导我)
这段代码实际上是一个存根,我用它来测试我的项目的其他模块。它为我完成了这项工作,我对此感到满意,但我心中存在一个问题,一个过程实际上是如何杀死自己的。我想知道一步一步的假设。
提前致谢
阿尼鲁德·托默