После серьезного обсуждения с моим другом мы решили спросить, на правильном ли пути наша интуиция. Проблема в функции fork(), точнее в дочерних процессах. Вот код:
int main()
{
int status;
if(!fork()) execl("pp1",NULL);
if(!fork()) execl("pp2",NULL);
if(!fork()) execl("pp3",NULL);
wait(&status);
return status;
}
Автор объясняет, что эта программа создаст только 3 дочерних процесса, но когда дело дойдет до первого дочернего процесса, она войдет в первое «если» и выполнит pp1 как новый процесс, но с тем же pid, что и у дочернего, и это нормально. . Проблема со вторым и третьим ребенком, как он будет запускать этот код. Наша интуиция такова, что до второго и третьего «если» мы не дойдем. Программа pp1 будет запущена 3 раза всеми тремя дочерними процессами.
Что вы думаете? Каков будет результат?
exec
и друзья тоже могут потерпеть неудачу. И если они это сделают, то дочерний процесс перейдет прямо к следующемуif
. - person Crowman   schedule 30.05.2014