Я написал программу, в которой целое число n
в качестве аргумента создает n-1
дочерние процессы. Переменные pid_t
, используемые в fork, хранятся в массиве. Для каждого дочернего элемента все pid[i]=-1
, кроме pid[childs_number]=0
.Soкогда я пишу if(pid[1]==0)
код внутри оператора if принадлежит дочернему (я проверил его, напечатав getpid()
внутри).
Код:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/stat.h>
#include <fcntl.h>
void handler(){
}
int main(int argc, char **argv)
{
int n=argv[1][0]-'0';
pid_t pid[n];
for(int i=1;i<n;i++)
{
pid[i]=fork();
if(pid[i]==0)
{
for(int j=1;j<n;j++)
{
if(i!=j)
{
pid[j]=-1;
}
}
break;
}
wait(0);
}
if(pid[1]==0)
{
signal(SIGINT,handler);
pause;
printf("why");
}
}
Поэтому после использования паузы я ожидаю, что процесс с pid[1]=0
будет ожидать сигнала SIGINT для продолжения работы. Однако выполнение этого кода печатает строку внутризаявление if, хотя я не отправил сигнал SIGINT.Почему это происходит и как я могу это исправить?