Вот такой код:
#!/bin/bash
if (( PPID==1 )); then
echo "(son, pid=$$, ppid=$PPID) a=$a"
# for ((i=0; i<25; i++)); do echo -n '='; sleep 1; done
else
echo "(parent, pid=$$, ppid=$PPID) exporting variable a to my son..."
export a=34
$0 &
# for ((i=0; i<25; i++)); do echo -n '-'; sleep 1; done
fi
Ведет себя несколько странно... Иногда два раза вызывается часть else, а потом один раз if (то есть PPID становится равным единице), иногда работает, как ожидается: один раз отрабатывает предок, который запускает сам себя в фоне, а у фоновой копии процесса отрабатывает блок if, после чего скрипт завершается.
Вопросы:
1) Почему вообще у потомка в таком случае PPID равен 1-му, ведь это PID процесса init!
2) Почему иногда PPID первого порожденного потомка оказывается корректным, указывает на реального предка? И при этом второе порождение потомка (из этого, с нормальным PPID) всё равно будет считать своим предком процесс init!
3) Если вы раскомментируете два цикла for, получите бесконечное самопорождение процессов. Это как так вообще?
Заранее признателен, всю бошку уж сломал, это вам не fork'анье тупое в C, это вам высшая математика BASH'а :)
Ответ на:
комментарий
от DRVTiny
Ответ на:
комментарий
от const86
Ответ на:
комментарий
от DRVTiny
Ответ на:
комментарий
от nu11
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Как автоматически завершить все процессы после отключения ssh (2024)
- Форум Bash многопоточность (2012)
- Форум Bash многопоточность (2019)
- Форум [bash] Многопоточность. (2011)
- Форум [когда коту делать нечего] Запуск agetty как демона (2012)
- Форум Многопоточная работа bash скрипта (2011)
- Форум [хочется странного][многопоточный шлюз] (2010)
- Форум [bash]хочется странного (2012)
- Форум странное поведение bash. (2012)
- Форум Странное поведение bash (2008)