Это из моей домашней работы. В коде должно быть 2 процесса, отец и ребенок. Но в коде будет 2 ноля, и он никогда не попадет в ветвь p1> 0.
Вот код Я использую fork () и получаю двойной ноль, это сбивает с толку. Я хочу знать, как работает fork () в этом коде.
#include "stdio.h"
#include "unistd.h"
#include "signal.h"
int k1;
void func1(int signo){
if (signo==SIGUSR2)
{
k1=0;
}
}
int main(int argc, char const *argv[])
{
int k,p1;
while (p1=fork()==-1);//one time
if (p1>0)
{
for (k = 1; k < 4; k++)
{
printf("parent:pid=%d\n",getpid());
sleep(1);
}
kill(p1,12);
wait(0);
printf("OK!\n");
exit(0);
}
else
{
signal(12,func1);
k1=1;
while (k1==1)
{
printf("I'm child\n");
sleep(1);
}
printf("Child forced!\n");
exit(0);
}
return 0;
}
Я хочу знать, как работает fork () в этом коде.
Вывод кода является циклическим выводом: «Я ребенок». Выведите две строки в секунду.
Однако, по моему мнению, должен появиться «parent: pid =% d», но код не попадет в ветку «p1> 0». кажется, что fork () генерирует 2 процесса, но все они имеют p1 = 0.