Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > fork and printf


Автор: devmstr 4.6.2007, 06:54
Код

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <iostream.h>

int main()
{
    int pid = fork();
    printf("%s\n", "First linux program");
    if (pid == 0)
        {
            printf("%s\n", "I'm a child");
            exit(0);
        }
    else
        {
            sleep(1000);
            printf("%s\n", "I'm a parent");
            sleep(200);
            exit(0);
        }
}


Почему данный код выводит:
Код

First linux program
I'm a child
First linux program

а не:
Код

First linux program
I'm a child
I'm a parent


Автор: MAKCim 4.6.2007, 11:09
fork() создает новый процесс, который выполняет тот же код, что и родительский (все, что после вызова fork())
после создания дочернего процесса, осуществляется переключение задач и управление от родительского процесса переходит к дочернему
тут вызывается
Код

printf("%s\n", "First linux program");

далее дочерний идет по ветке pid == 0 (потому что он дочерний) и вызывается 
Код

printf("%s\n", "I'm a child");

далее дочерний процесс успешно умирает
Код

exit(0);

через некоторое время управление передается обратно родительскому и он возобновляет выполнение с кода, который следует за fork(), т. е опять идет вызов
Код

printf("%s\n", "First linux program");

далее он спит 1000 секунд, потом идет вызов
Код

printf("%s\n", "I'm a parent");

потом спит еще 200 секунд и также успешно завершается

Автор: HappyCoder 4.6.2007, 18:18
Какой практический смысл использовать несколько процессов?

Автор: MAKCim 4.6.2007, 18:22
Цитата(HappyCoder @  4.6.2007,  18:18 Найти цитируемый пост)
Какой практический смысл использовать несколько процессов? 

ну да, к черту мультизадачность  smile 

Автор: HappyCoder 4.6.2007, 22:58
Цитата(MAKCim @ 4.6.2007,  18:22)
Цитата(HappyCoder @  4.6.2007,  18:18 Найти цитируемый пост)
Какой практический смысл использовать несколько процессов? 

ну да, к черту мультизадачность  smile

Мульти- или многозадачность? Раз уж о ней зашла речь, что лучше в этом плане использовать, процесс или поток(pthread)? Об этом знаю только по наслышке.

Автор: BlackStar 5.6.2007, 09:37
IMHO зависит от задачи, если хочется иметь простой доступ к общей памяти то потоки, но тут же возникает проблема синхронизации и "состояние гонок".

Автор: MAKCim 5.6.2007, 14:10
Цитата(HappyCoder @  4.6.2007,  22:58 Найти цитируемый пост)
Мульти- или многозадачность?

это оно и тоже
мульти = много
Цитата(BlackStar @  5.6.2007,  09:37 Найти цитируемый пост)
но тут же возникает проблема синхронизации и "состояние гонок". 

ну процессы этого тоже не лишены  smile 
Цитата(HappyCoder @  4.6.2007,  22:58 Найти цитируемый пост)
Раз уж о ней зашла речь, что лучше в этом плане использовать, процесс или поток(pthread)?

если хочешь распараллелить очень много всего - тогда потоки (NPTL) эффективнее будут
как уже сказал BlackStar, если есть много совместно используемых данных, то использование потоков - по крайней мере избавит от необходимости в использовании IPC (shared memory, message queues, ...)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)