#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をプロセスに送信し、プロセスのプロセステーブルにコピーします。プロセスがユーザーモードに戻ると、テーブル内の信号が表示され、それ自体が終了します(どのように?私は本当に知りません) (私は仮説のどこかで間違っていると思います(失敗かもしれません)...だからお願いします私を啓発します)
このコードは、実際には、プロジェクトの他のモジュールをテストするために使用しているスタブです。それは私のために仕事をしていて、私はそれに満足していますが、プロセスが実際にどのようにそれ自体を殺すのかという疑問が私の心にあります。ステップバイステップの仮説を知りたいです。
前もって感謝します
アニルード・トマー