Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Задача о процессах

#c #linux


Коллеги, хочу поделиться забавной задачей. Сколько новых процессов будет порождено
в ходе выполнения данной программы и почему?
#include 

int main() {
    int i;
    for (i = 0; i < 3; i++) {
        if (fork() && (i == 1))  break;
    }
return 0;
}
    


Ответы

Ответ 1



Пять. Исходный процесс порождает два, завершается с i==1, второй -- один, выход по i==1, третий и четвертый -- по одному, выход i==3. Пятый и шестой погибают бездетными. Исходный и пять новых

Ответ 2



Хех, ну после рисования на бумажке получается 6 потоков) Исходный поток1 порождает поток2 Проверяется условие в обоих потоках, ни в одном не выполняется Поток1 порождает поток3. Проверяется условие в потоке1, выполняется, поток завершается. Проверяется условие в потоке3, не выполняется. Поток3 порождает поток4. Проверяется условие выхода из цикла в потоке4 и потоке3, не выполняются, потоки выходят из циклов и завершаются. Тем временем поток2 времени даром не теряет. Порождает поток5. Проверяется условие в потоке2, выполняется, поток завершается. Поток5 порождает поток6. Проверяются условия выхода из цикла в потоке5 и потоке6, не выполняются, потоки выходят из циклов и завершаются. Пфффффф....

Ответ 3



1 итерация. 0 && (0 == 1), break не выполняется, процесс порождённ. 2 итерация. 0 && (1 == 1), break не выполняется, процесс порожден 3 итерация. 0 && (2 == 1), break не выполняется, процесс порождён, выход из цикла Итого, 3 порождённых + 1 родительский, наверно :) P.S я не знаю что делает fork(); в дебрях и под Linux не пишу, только что прочитал в сети.

Комментариев нет:

Отправить комментарий