Итак, запускается прога p1
Здесь и далее запись вида %i(%i) означает pid(ppid)
p1 101(80)
|
|-----fork->--------------+
| |
+>-p1-main (sleep(1000); |
|
+-<----p1-child----<------+
|
execve ("p2", .......);
|
V
p2 102(101)
|
|->--fork---->------------|
| |
+>-p2-main (return 0); |
|
p2-child--103(1)----<-----+
Допустим p1 101(80)
Прога форкается и имеем p1-main 101(80) и p1-child 102(101)
p1-main вешается в длинный слип и ни кому не мешает
p1-child делает execve, запуская тем самым прогу p2 102(101)
То бишь пид и ппид сохраняются, как по-моему man-разумению
и должно быть
p2 тоже форкается и тут начинается самое интересное
Первое: p2-main 102(101) прощается с нами и делает return 0
По идее должна завершиться, но на самом деле она уходит в зомби и остаётся висеть, пока p1-main
не окончится (кончится слип p1-main или придёт какой-нить SIGINT) и исчезает вместе с ним
Второе: p2-child почему-то имеет значения 103(1), то бишь
имеет предком не p2-main, а init.
Вопросы:
1. Почему зомбируется p2-main и так зависит от предка
p1-main, с которым связь аж через execve(замещение всех данных)?
2. С какого х.... ппид для p2-child не 102, а 1 ?
Интересующимся могу выслать маленькие дебаг-сырцы для p1 и p2.
Ответ на:
комментарий
от Ant0
Ответ на:
комментарий
от Ex
Ответ на:
комментарий
от Ant0
Ответ на:
комментарий
от Die-Hard
Ответ на:
комментарий
от Ant0
Ответ на:
комментарий
от Ant0
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум fork + execv = zombie (2003)
- Статьи Как кушать вилкой. ... или о fork() в двух словах (2023)
- Форум AppArmor - странности в поведении (2011)
- Форум execve (2005)
- Форум kbhit, execve (2002)
- Форум python execve (2005)
- Форум Fork() (2017)
- Форум Fork (2015)
- Форум fork() (2020)
- Форум fork() (2005)