Мне нужно разветвить два дочерних процесса, в которых заблокирована команда SIGINT, но один из них должен разблокировать ее при получении сигнала SIGTERM, в то время как другой дочерний процесс и родительский процесс оба печатают свои PID в результате того же SIGTERMсигнал.Второй дочерний процесс должен завершиться сразу же, но родительский процесс должен дождаться завершения своих дочерних процессов и затем остановиться.
Я только начал изучать программирование на C в Linux, и я не очень понимаю, как разветвляетсяи сигналы работают.Насколько я понимаю, этот код, который я написал до сих пор, будет ветвить процесс, и дочерний процесс будет блокировать команду Ctrl-C, и все это будет выполняться вечно, если я не уничтожу его командой kill -9 pid .
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
void handler(int n) {
write(STDOUT_FILENO, "I won't die!! Haha\n",13);
}
int main()
{
pid_t pid = fork();
if (pid < 0) {
perror("Fork() error!");
exit(-1);
}
if (pid == 0)
signal(SIGINT,handler);
while(1) {
printf("Wasting the iteration. %d\n", getpid());
sleep(1);
}
return 0;
}
- Как использовать SIGTERM?Где мне это назвать?
- Как заставить родителя создать еще один дочерний процесс, который тоже блокирует команду Ctrl-C?