Я развожу ребенка и пытаюсь его убить.Не удалось убить процесс fork'ed
pid_t *child_pid;
int main(){
child_pid = mmap(NULL, sizeof(pid_t), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);$
int a = fork();
if (a != 0) {
printf("child @ %d\n", a);
*child_pid = a;
system("sleep 100");
} else {
sleep(1);
printf("Trying to kill %d\n", *child_pid);
int ret = kill(*child_pid,SIGKILL);
printf("killled with %d\n", ret);
}
}
Однако команда убить застревает на:
child @ 4752
Trying to kill 4752
В то же время, называя пс показывает это:
4752 pts/4 00:00:00 simple <defunct>
Но как Ctrl-C принудительно завершает процесс? – bob
@bob Ctrl-C обрабатывается вашей оболочкой, которая отслеживает идентификаторы процессов своих дочерних элементов. Если вы нажмете Ctrl-C, оболочка выполнит kill (SIGTERM) в процессе (ваши «простые»), «простые» выходы, оболочка получит уведомление по сигналу, после чего оболочка собирает статус выхода с waitpid(). Это довольно сложный процесс ... Ключевым элементом здесь является wait()/waitpid(). – JvO