поэтому у меня есть эта основная функция:PID нескольких детей отделилась тот же родительский
int main() {
cout << "Before fork: " << getpid() << endl;
pid_t pid;
pid = fork();
for (int i = 0; i < 3; ++i) {
if (pid < 0) {
cout << "ERROR: Unable to fork.\n";
return 1;
}
else if (pid == 0) {
switch(i) {
case 0:
for (int b = 0; b < 10; ++b) {
cout << "b " << getpid() << endl;
cout.flush();
}
break;
case 1:
for (int c = 0; c < 10; ++c) {
cout << "c " << getpid() <<endl;
cout.flush();
}
break;
case 2:
for (int d = 0; d < 10; ++d) {
cout << "d " << getpid() << endl;
cout.flush();
}
break;
default:
cout << "ERROR" << endl;
return 1;
}
}
else {
for (int a = 0; a < 10; ++a) {
cout << "a " << getpid() << endl;
cout.flush();
}
}
}
return 0;
}
Суть этой программы запускается четыре процесса, в то же время, каждый выводя характер определенное количество раз. Всякий раз, когда я запускаю программу, я понимаю, что у детей, которых я создал, есть один и тот же PID. Предполагается, что это так? Если нет/так, почему?
Где бы я вставлял инструкции fork(), чтобы были созданы 3 ребенка? Я переместил вилку(), которая у меня была в петле для меня, но я думаю, что она пошла бесконечно и разбила все. –
EDIT: Я решил проблему, изменив свои инструкции break в ответ 0, чтобы предотвратить бесконечные вызовы fork(). Было напечатано 4 разных PID, ничего не разбилось, поэтому я полагаю, что это правильное решение. –
Выполнение трех разных вещей с помощью цикла for, который делает (почти) ничего, кроме большого оператора switch, не является тем, что передало бы обзор кода, где я работаю, но, эй, это ваш код, я полагаю, у вас есть веская причина для этого, путь. –