Использование паузы в с - PullRequest
1 голос
/ 02 мая 2019

Я написал программу, в которой целое число 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.Почему это происходит и как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...