как пойдет выполнение процесса.
1. Делаем one = frok(); Что будет дальше?
если не произошло ошибки (которую ,к слову, ты не проверяешь), то у тебя будет два процесса. В родительском процессе one будет иметь pid дочернего процесса и он гарантированно будет больше 1. В дочернем процессе one будет равен 0. Благодаря этому в коде мы можем определить где какой процесс выполняется. Замечу, что после fork() изменения переменной в одном процессе не влияют на переменные в другом. Дальше выполнение программы независимо, хоть и исполняют один и тот же код.
2. Дальше идет if (!one). Напомню, в одном случае one равен 0, а во втором больше 0. В этот if зайдет дочерний процесс. И после выполнения инструкция в if, у тебя будет родительский процесс, который имеет дочерний процесс, который в свою очередь имеет сам дочерний процесс. Другими словами: дед-отец-сын. Такую структуру ты хочешь или другую?
Опять же oneId = getpid(). Эту строчку не увидят другие процессы.
3. Первый if прошли. Идем дальше ко второму if. К этой строчке у тебя уже будет три процесса. В процессе "дед" у тебя two имеет неизвестное значение. В процессе "отец" будет больше нуля, а в процессе "сын" равен 0.
4. Во втором if изменения twoId нигде заметно не будет. В этот if могут зайти процесс "сын" и ВОЗМОЖНО процесс "дед", так как неизвестно, чему в процессе "дед" равен two. И гарантированно значения переменной twoId после выполнения этого if будут разными, так как у процессов разные pid.
Ребята, всё классно, круто, но только это совсем не для начинающих...
Обсуждают сегодня