nixp.ru v3.0

29 мая 2017,
понедельник,
14:23:58 MSK

DevOps с компанией «Флант»
anonymous написал 25 июня 2004 года в 19:36 (636 просмотров) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Я оконачательно запутался как работает системный вызов fork. Помогите, кто-нибудь, пожалуйста!

Все начинается с main. Далее что-делается затем вызывается fork. Порождается копия процесса.

(1)Эта копия проходит все сначала с main или продолжает путь после вызова?

(2)Если я перед порождением нового процесса выделил память, то я должен освободить ее в процессе-копии и в вызвавшем процессе?

(3)Если fork возвращает больше нуля, это pid номер старого процесса?

(4)И при возвращении больше нуля fork породил процесс или нет?

1) Нет, процесс просто «разделяется» в месте вызова. То есть получается абсолютно идентичный данному процесс. Все переменные, память и прочее у них одинаковы.

2) Да.

3) Нет, это pid нового процесса, который получает родитель (старый процесс). Дочернему же процессу возвращается 0.

4) Да, разумеется.

anonymous

Спасибо! Но вот еще одна непонятка:

Описание по возвращаемому значению fork (можно считать, что из справочника):

0 — в новом процессе.

pid нового процесса — в исходном.

Далее мой текст:

main(){

pid=fork();

return 0;

}

Если процессы разделяются, как вы пишите, то когда возвращается 0, если в fork программа заходит один раз?

Фух

pid=fork();

switch(pid) {

case 0:

child_code();

case -1:

exit(EXIT_FAILURE);

default:

parent_code();

}

Fatal

Так как вы говорите приблизительно и написано в справочниках. Но меня интересует: когда заходится в fork там порождается процесс-копия, затем выходится из fork сразу в два процесс, одному возвращает 0 (сыну), другому — pid сына, я правильно понял?

Да.

Fatal

Спасибо!

myst

Кстати, вопрос на засыпку: что возвращает exec(), если не было ошибок?

Uncle Theodore
myst
Кстати, вопрос на засыпку: что возвращает exec(), если не было ошибок?

Ничего не возвращает, потому как некуда возвращать. Это ты типа прикалываешься или man execve не веришь?

Good Luck,

UT

myst
Uncle Theodore
Ничего не возвращает, потому как некуда возвращать. Это ты типа прикалываешься или man execve не веришь?

Good Luck,

UT

Прикалываюсь. Вообще-то такие вопросы уважают задавать при приёме на работу во всякие буржуйские компании.

Хе, меня просили прислать пример кода, а потом спрашивали, нафига что у меня в этом коде понаписано. Например, зачем я обрабатываю всякие там SIGTERM’ы. Виды сигналов POSIX. Распрашивали, зачем у меня применяется shared memory, какие ее бывают типы. Потом было несколько специализированных вопросов о солярисе, о libpcap и libnet. Ну и куча вопросов по ipc. Так что вопрос про exec вряд ли можно назвать каверзным :)

Uncle Theodore

Блин, не бередите душу! :-) Знаете, какие вопросы задают на интервью американскому профессору математики?

1. Расскажите о Ваших исследованиях.

После 10 минут твоего вдохновенного песнопения выясняется, что интервьюер из совершенно другой области математики, и в твоем словесном поносе ни уха ни рыла не сечет.

2. Как Вы используете технологические новинки в Ваших лекциях? Используете ли Вы графические калькуляторы?

(НЕТ!! И с трудом борюсь с желанием вырвать их из рук идиотов-студентов, которые умножают 2 на 10 на калькуляторе!! — это то, что я думаю…)

Да, конечно. Они дают прекрасную возможность визуализации основных концепций (а ля «баран на новые ворота») и устраняют рутину вычислений (вместе со смыслом этих вычислений)

3. Как Вы используете новейшие педагогические методы в Вашей работе, например метод разделения студентов на малые группы?

(Ага, это где один решает задачу, а остальные у него списывают). Да, конечно. Я специально выбираю задания, которые можно в качестве проекта разделить на несколько подзадач. Это развивает лидерство (дедовщину) и способность (имитации) работы в группах.

4. Расскажите о Вашей философии преподавания.

(Стараюсь студентов по голове не бить — и так идиоты). За многие годы работы я выработал … ляляля кренделя…

Тошно.

Однако, мы отвлеклись… :-)

Good Luck,

UT