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