anonymous
написал 25 июня 2004 года в 19:36 (1351 просмотр)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
Я оконачательно запутался как работает системный вызов fork. Помогите, кто-нибудь, пожалуйста!
Все начинается с main. Далее что-делается затем вызывается fork. Порождается копия процесса.
(1)Эта копия проходит все сначала с main или продолжает путь после вызова?
(2)Если я перед порождением нового процесса выделил память, то я должен освободить ее в процессе-копии и в вызвавшем процессе?
(3)Если fork возвращает больше нуля, это pid номер старого процесса?
(4)И при возвращении больше нуля fork породил процесс или нет?
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
1) Нет, процесс просто «разделяется» в месте вызова. То есть получается абсолютно идентичный данному процесс. Все переменные, память и прочее у них одинаковы.
2) Да.
3) Нет, это pid нового процесса, который получает родитель (старый процесс). Дочернему же процессу возвращается 0.
4) Да, разумеется.
Спасибо! Но вот еще одна непонятка:
Описание по возвращаемому значению 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();
}
…
Так как вы говорите приблизительно и написано в справочниках. Но меня интересует: когда заходится в fork там порождается процесс-копия, затем выходится из fork сразу в два процесс, одному возвращает 0 (сыну), другому — pid сына, я правильно понял?
Да.
Спасибо!
Кстати, вопрос на засыпку: что возвращает exec(), если не было ошибок?
Ничего не возвращает, потому как некуда возвращать. Это ты типа прикалываешься или man execve не веришь?
Good Luck,
UT
Прикалываюсь. Вообще-то такие вопросы уважают задавать при приёме на работу во всякие буржуйские компании.
Хе, меня просили прислать пример кода, а потом спрашивали, нафига что у меня в этом коде понаписано. Например, зачем я обрабатываю всякие там SIGTERM’ы. Виды сигналов POSIX. Распрашивали, зачем у меня применяется shared memory, какие ее бывают типы. Потом было несколько специализированных вопросов о солярисе, о libpcap и libnet. Ну и куча вопросов по ipc. Так что вопрос про exec вряд ли можно назвать каверзным :)
Блин, не бередите душу! :-) Знаете, какие вопросы задают на интервью американскому профессору математики?
1. Расскажите о Ваших исследованиях.
После 10 минут твоего вдохновенного песнопения выясняется, что интервьюер из совершенно другой области математики, и в твоем словесном поносе ни уха ни рыла не сечет.
2. Как Вы используете технологические новинки в Ваших лекциях? Используете ли Вы графические калькуляторы?
(НЕТ!! И с трудом борюсь с желанием вырвать их из рук идиотов-студентов, которые умножают 2 на 10 на калькуляторе!! — это то, что я думаю…)
Да, конечно. Они дают прекрасную возможность визуализации основных концепций (а ля «баран на новые ворота») и устраняют рутину вычислений (вместе со смыслом этих вычислений)
3. Как Вы используете новейшие педагогические методы в Вашей работе, например метод разделения студентов на малые группы?
(Ага, это где один решает задачу, а остальные у него списывают). Да, конечно. Я специально выбираю задания, которые можно в качестве проекта разделить на несколько подзадач. Это развивает лидерство (дедовщину) и способность (имитации) работы в группах.
4. Расскажите о Вашей философии преподавания.
(Стараюсь студентов по голове не бить — и так идиоты). За многие годы работы я выработал … ляляля кренделя…
Тошно.
Однако, мы отвлеклись… :-)
Good Luck,
UT