Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> fork and printf 
:(
    Опции темы
devmstr
Дата 4.6.2007, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 28.4.2004
Где: Ukraine

Репутация: нет
Всего: 11



Код

#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




--------------------
Think different ©Steve Jobs 
user posted image
PM MAIL WWW   Вверх
MAKCim
Дата 4.6.2007, 11:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



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 секунд и также успешно завершается


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
HappyCoder
Дата 4.6.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.5.2007

Репутация: нет
Всего: нет



Какой практический смысл использовать несколько процессов?
PM MAIL   Вверх
MAKCim
Дата 4.6.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



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

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


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
HappyCoder
Дата 4.6.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 31.5.2007

Репутация: нет
Всего: нет



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

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

Мульти- или многозадачность? Раз уж о ней зашла речь, что лучше в этом плане использовать, процесс или поток(pthread)? Об этом знаю только по наслышке.
PM MAIL   Вверх
BlackStar
Дата 5.6.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 13.12.2006

Репутация: 2
Всего: 5



IMHO зависит от задачи, если хочется иметь простой доступ к общей памяти то потоки, но тут же возникает проблема синхронизации и "состояние гонок".
PM MAIL Jabber   Вверх
MAKCim
Дата 5.6.2007, 14:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(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, ...)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.4009 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.