Почему программа не заканчивается? Ребенок зависает после печати того, что он должен распечатать. Если родительский процесс спал вместо ребенка, это сработало бы, но почему? Я также попытался вызвать exit в конце каждого процесса, но с тем же результатом. Должен ли я всегда ждать окончания ребенка?Почему вилка висит?
int main(){
int pid = fork();
char s[100] = "Hello";
if(pid > 0){
printf("FIRST PRINT IN PARENT: %s\n", s);
strcat(s, " - PARENT");
printf("SECOND PRINT IN PARENT: %s\n", s);
}
else if(pid == 0){
printf("IMMEDIATELY IN CHILD: %s\n", s);
sleep(2);
printf("AFTER 2 SCONDS IN CHILD: %s\n", s);
}
return 0;
}
Are вы * уверены * он "зависает"? Дело не в том, что терминал печатает выходные данные дочернего элемента и просто не отображает подсказку еще раз? Попробуйте нажать клавишу «Enter» и посмотреть, что произойдет. Кроме того, если вы внимательно посмотрите в своем терминале, вы, вероятно, увидите * подсказку перед последним выходом дочернего элемента. –
Не вы, но ваш _shell_ ждет завершения процесса _parent_. Вам нужно будет удвоить fork, чтобы мгновенно восстановить приглашение оболочки. – Ctx
Код работает для меня. Если вы подозреваете, что он «висит», он все еще отображается на выходе 'ps'? – cdarke