Я пытаюсь создать несколько процессов от одного и того же родителя, но он всегда заканчивается большим количеством процессов, чем ожидалось. Я не мог понять, как это сделать и вам нужна помощь.Как разбить несколько процессов от одного и того же родителя?
я нашел кусок кода в Интернете и попробовал,
int main()
{
pid_t pid=0;
int i=0;
for (i=0; i<3; i++)
{
pid=fork();
switch(pid)
{
case 0:
{
cout<<"\nI am a child and my pid is:"<<getpid();
cout<<endl;
exit(0);
break;
}
default:
{
cout<<"\nI am a parent and my pid is: "<<getpid();
cout<<"\nMy child pid is: "<<pid;
cout<<endl;
wait(NULL);
break;
}
}
}
return 0;
}
Этот код работает и создает 3-х детей из того же родителя. Однако, похоже, это потому, что после того, как был создан каждый дочерний процесс, он был немедленно прекращен. Поэтому в следующем раунде цикла for не будет развиваться процесс внука. Но мне нужно, чтобы эти дочерние процессы работали на некоторое время, и им нужно общаться с родителями.
Производит ли он выход «Я ребенок ...»? Как только вы вызываете exit, процесс завершается. Причина, по которой они заканчиваются так быстро, заключается в том, что вы ничего не делаете в этом процессе. Вы должны вызывать некоторую интенсивную работу с ЦП, а не печатать и немедленно выходить. – Micah
Это не проблема с fork, а простая логическая проблема. 'fork()' возвращает 0 в дочернем элементе. Отметьте на бумаге, что здесь происходит, без «выхода» для ребенка, цикл снова запускается, а «fork» выполняется снова. То, что вы хотите сделать, это * if * процесс - это ребенок, вы выходите из цикла, * else * вы продолжаете цикл и forking ... – Leiaz
Спасибо вам за то, что ответили на мой вопрос. Я изменил свой код, используя if..else вместо case..switch и добавив разрыв в конце раздвоенного дочернего процесса, чтобы выйти из цикла, и он работает !!!!! Я получил именно то, что хочу! – Karen