#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 процессу и копирует его в таблицу процессов процесса.когда процесс возвращается в режим пользователя, он видит сигнал в своей таблице и завершает себя (КАК? Я ДЕЙСТВИТЕЛЬНО НЕ ЗНАЮ) (я думаю, что где-то в моей гипотезе я ошибаюсь (может быть, ошибкой) ..Пожалуйста, просветите меня)
Этот код на самом деле является заглушкой, которую я использую для тестирования других моих модулей Проекта.Это делает работу для меня, и я доволен этим, но у меня возникает вопрос, как на самом деле процесс убивает себя.Хочу узнать пошаговую гипотезу.
Заранее спасибо
Анирудх Томер