Чи можливо змінити батьківський процес процесу? Якщо так, то як?
Наприклад,
як
screen
вдається приєднатиscreen
сеанс та процеси, що працюють всередині нього, до різних оболонок? Чи є зміна батьківського процесу?Здається, я чув про інші способи зміни оболонки, в яких працює програма, але я не пам'ятаю. Чи є також зміна батьківського процесу програми?
Я думав,
disown
що процес змінює батьківський процес процесу, просто тому, що назва цеdisown
означає. Але я виявив, що це неправда.Клієнт Emacs може приєднатися до сервера emacs на іншій вкладці терміналу. Чи є зміна батьківського процесу?
getppid(2)
ядро обробляє дзвінки , системний виклик та системні дзвінки. Програму можна плутати, видаючи цей виклик, зберігаючи значення та використовуючи це значення після зміни його батьківського стану. Тут є шанс на стан гонки.
disown
просто видаляє задану дитину із внутрішнього списку дочірніх процесів оболонки. PPID дитини залишається рівним оболонки. Оболонка забула, що коли-небудь заводила цю дитину, але ядро пам’ятає.