The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Как работает fork()"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Процессы, Треды, RPC)
Изначальное сообщение [ Отслеживать ]

"Как работает fork()"  +/
Сообщение от rdzxx (ok) on 14-Окт-17, 11:39 
Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит развоение процеса в точке вызова. Но вот что под копотом непонятно. С памятью понятно там используется 'copy on write' механизм, но вот что с кодом? Откуда потомок берет код?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как работает fork()"  +/
Сообщение от PavelR (??) on 14-Окт-17, 13:04 
> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
> развоение процеса в точке вызова. Но вот что под копотом непонятно.
> С памятью понятно там используется 'copy on write' механизм, но вот
> что с кодом? Откуда потомок берет код?

А код он не в памяти?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как работает fork()"  +/
Сообщение от rdzxx (ok) on 14-Окт-17, 14:02 
>> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
>> развоение процеса в точке вызова. Но вот что под копотом непонятно.
>> С памятью понятно там используется 'copy on write' механизм, но вот
>> что с кодом? Откуда потомок берет код?
> А код он не в памяти?

В случае с интерпретаторами не уверен

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 14-Окт-17, 14:15 
>>> Не могу разобраться что происходит в момент вызова fork(). Понятно что происходит
>>> развоение процеса в точке вызова. Но вот что под копотом непонятно.
>>> С памятью понятно там используется 'copy on write' механизм, но вот
>>> что с кодом? Откуда потомок берет код?
>> А код он не в памяти?
> В случае с интерпретаторами не уверен

Наверное зависит от компилятора, нужно скомпилить пробную программу в нужном компиляторе, и посмотреть код.

Или посмотреть в исходниках компилятора, как от это делает .....


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Как работает fork()"  +1 +/
Сообщение от Аноним (??) on 14-Окт-17, 14:33 
> Или посмотреть в исходниках компилятора, как от это делает .....

fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации этой функции, надо смотреть исходники ядра той ОС, в которой ты его запускаешь. В *BSD и Linux код fork()  в ядре будет разный.


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 14-Окт-17, 15:05 
>> Или посмотреть в исходниках компилятора, как от это делает .....
> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
> этой функции, надо смотреть исходники ядра той ОС, в которой ты
> его запускаешь. В *BSD и Linux код fork()  в ядре
> будет разный.

Ок, полезная инфа,

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Как работает fork()"  +/
Сообщение от ПавелС (ok) on 14-Окт-17, 15:48 
>>> Или посмотреть в исходниках компилятора, как от это делает .....
>> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>> его запускаешь. В *BSD и Linux код fork()  в ядре
>> будет разный.
> Ок, полезная инфа,

Происходит точное копирование процесса, создание копии.
И потомок и родитель содержат код и потомка и родителя. Только родитель идёт по своей ветке алгоритма, а потомок по своей.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Как работает fork()"  +/
Сообщение от ПавелС (ok) on 14-Окт-17, 16:00 
>>>> Или посмотреть в исходниках компилятора, как от это делает .....
>>> fork() это системный вызов (syscall), в компиляторе ты не найдешь код реализации
>>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>>> его запускаешь. В *BSD и Linux код fork()  в ядре
>>> будет разный.
>> Ок, полезная инфа,
> Происходит точное копирование процесса, создание копии.
> И потомок и родитель содержат код и потомка и родителя. Только родитель
> идёт по своей ветке алгоритма, а потомок по своей.

Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0 к примеру. В потомке 1. Ты делаешь ифы и они дальше выполняют разное.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Как работает fork()"  +/
Сообщение от rdzxx (ok) on 14-Окт-17, 19:06 
>[оверквотинг удален]
>>>> этой функции, надо смотреть исходники ядра той ОС, в которой ты
>>>> его запускаешь. В *BSD и Linux код fork()  в ядре
>>>> будет разный.
>>> Ок, полезная инфа,
>> Происходит точное копирование процесса, создание копии.
>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>> идёт по своей ветке алгоритма, а потомок по своей.
> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
> к примеру. В потомке 1. Ты делаешь ифы и они дальше
> выполняют разное.

Про это читал, но вот все таки что происходит с кодом? Как сказано выше он берется так же из памяти?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Как работает fork()"  +/
Сообщение от ыы on 14-Окт-17, 20:30 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

https://ru.wikipedia.org/wiki/Fork
https://www.opennet.ru/man.shtml?topic=fork

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Как работает fork()"  +/
Сообщение от prog on 15-Окт-17, 06:08 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

тебе нужно начать - структура программы в памяти, старт программы что в этот момент происходит и т.п. процессе

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Как работает fork()"  +/
Сообщение от rdzxx (ok) on 15-Окт-17, 07:26 
>[оверквотинг удален]
>>>> Происходит точное копирование процесса, создание копии.
>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>> выполняют разное.
>> Про это читал, но вот все таки что происходит с кодом? Как
>> сказано выше он берется так же из памяти?
> тебе нужно начать - структура программы в памяти, старт программы что в
> этот момент происходит и т.п. процессе

Понял, спасибо

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 15-Окт-17, 09:39 
>[оверквотинг удален]
>>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>> выполняют разное.
>>> Про это читал, но вот все таки что происходит с кодом? Как
>>> сказано выше он берется так же из памяти?
>> тебе нужно начать - структура программы в памяти, старт программы что в
>> этот момент происходит и т.п. процессе
> Понял, спасибо

А я не понял, все это делает ядро, а вот как пока не ясно


Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 15-Окт-17, 09:40 
>[оверквотинг удален]
>>>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>>> выполняют разное.
>>>> Про это читал, но вот все таки что происходит с кодом? Как
>>>> сказано выше он берется так же из памяти?
>>> тебе нужно начать - структура программы в памяти, старт программы что в
>>> этот момент происходит и т.п. процессе
>> Понял, спасибо
> А я не понял, все это делает ядро, а вот как пока
> не ясно

Тут нужно знать как ядро работает .....

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 15-Окт-17, 09:43 
>[оверквотинг удален]
>>>>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>>>>> выполняют разное.
>>>>> Про это читал, но вот все таки что происходит с кодом? Как
>>>>> сказано выше он берется так же из памяти?
>>>> тебе нужно начать - структура программы в памяти, старт программы что в
>>>> этот момент происходит и т.п. процессе
>>> Понял, спасибо
>> А я не понял, все это делает ядро, а вот как пока
>> не ясно
> Тут нужно знать как ядро работает .....

Linus должен объяснить как правильно fork-нуться ......

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Как работает fork()"  +/
Сообщение от ПавелС (ok) on 15-Окт-17, 10:12 
>[оверквотинг удален]
>>>>> будет разный.
>>>> Ок, полезная инфа,
>>> Происходит точное копирование процесса, создание копии.
>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>> идёт по своей ветке алгоритма, а потомок по своей.
>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>> выполняют разное.
> Про это читал, но вот все таки что происходит с кодом? Как
> сказано выше он берется так же из памяти?

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

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

16. "Как работает fork()"  +/
Сообщение от ПавелС (ok) on 15-Окт-17, 10:12 
>[оверквотинг удален]
>>>> Происходит точное копирование процесса, создание копии.
>>>> И потомок и родитель содержат код и потомка и родителя. Только родитель
>>>> идёт по своей ветке алгоритма, а потомок по своей.
>>> Если проще. Вот fork. Он сделал копию процесса. В родителей возвратился 0
>>> к примеру. В потомке 1. Ты делаешь ифы и они дальше
>>> выполняют разное.
>> Про это читал, но вот все таки что происходит с кодом? Как
>> сказано выше он берется так же из памяти?
> Программа дублируется в памяти. В ней и код родителя и потомка. Выполняются
> разные части.

Да из памяти.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Как работает fork()"  +1 +/
Сообщение от pavlinux (ok) on 16-Окт-17, 03:28 
> Не могу

1. Копируется окружение (память)
2. Создаётся пустой (чистый), спящий процесс (новый PID)
3. Скопированное окружение прописывается новому процессу.
4. Процесс будят (суют в конец очереди планировщика).
5. Отваливают.
6. Новый процесс доходит до очереди к процессору. Ура!!!

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

18. "Как работает fork()"  +1 +/
Сообщение от Аноним email(??) on 16-Окт-17, 07:19 
>> Не могу
> 1. Копируется окружение (память)
> 2. Создаётся пустой (чистый), спящий процесс (новый PID)
> 3. Скопированное окружение прописывается новому процессу.
> 4. Процесс будят (суют в конец очереди планировщика).
> 5. Отваливают.
> 6. Новый процесс доходит до очереди к процессору. Ура!!!

павлинух друх ты мой, тока ты усе знаешь

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 16-Окт-17, 07:23 
павлинух, прикинь я вчера кардан от К-700 пропил,
Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 16-Окт-17, 07:24 
> павлинух, прикинь я вчера кардан от К-700 пропил,

передний


Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Как работает fork()"  +/
Сообщение от pavlinux (ok) on 18-Окт-17, 02:45 
>> павлинух, прикинь я вчера кардан от К-700 пропил,
>  передний

Кто здесь?! o.O


Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 18-Окт-17, 08:47 
>>> павлинух, прикинь я вчера кардан от К-700 пропил,
>>  передний
> Кто здесь?! o.O

RedD

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

23. "Как работает fork()"  +/
Сообщение от Аноним email(??) on 18-Окт-17, 10:18 
>>> павлинух, прикинь я вчера кардан от К-700 пропил,
>>  передний
> Кто здесь?! o.O

Но как продвинутый, ты должен писать who

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру