Родительский идентификатор процесса (PPID) процесса не может быть изменен за пределами ядра; Нет SetPPPID System Call. Ядро изменит только PPID в (PID), только после того, как родитель процессов расторгнут - если процесс не ответил на сигнал того, что родитель был прекращен. Чтобы это произошло, процесс должен проигнорировать различные сигналы ( Sighup
, SIGTERM
и т. Д.)
Экран (1)
имеет очень элегантные средства обработки отсоединения и присоединения. При первом запуске экран
, вы на самом деле запускаете пользовательский интерфейс (UI), который по умолчанию создаст демону (менеджер сеанса). Этот демон не имеет терминала, связанного с ним, новой группой процессов ( SETPGRP (2)
), новый идентификатор сеанса ( Setsid (2)
). Демон, работающий в виде экрана
, затем создает подпроцессы, подключенные к псевдоэнцерминалам ( pty
), затем мультиплексирует данные из PTYS и экрана UI (
). Подпроцессы думают, что они разговаривают с настоящим терминалом.
Если экран UI
завершает экран демона
. и в собственной сессии. Когда вы воссоединитесь с новым экраном UI
, то демон продолжит мультиплексировать, как это было раньше. Демон будет запущен продолжить работу, пока все подпроцессы не будут убиты, столкнутся с фатальной ошибкой или хост-перезагрузки.
Я понимаю. Вам нужно изменить ядро, чтобы написать какой-нибудь модуль для этого! Думаю, в некоторых случаях будет полезно. Например, вы выполняете какую-то длительную тяжелую работу, которая занимает много ресурсов в течение нескольких часов... И когда система не отвечает (, как обычно в этом случае ), вы делаете какие-то непредсказуемые действия (, потому что вам нужно сделать, и вы не убедитесь, что вы щелкнули мышью в правильном месте, чтобы система не отвечала в течение длительного времени )и случайно убивала родительский процесс. Система обычно убивает всех детей! Но если дочерний процесс является корневым, а родительский - только порядковым пользователем, и действие также делает порядковым пользователем, этот процесс не будет убит в любом случае! И его родитель будет инициализирован с PID 1. И после того, как система наконец ответит, вы захотите восстановить иерархию. Но нельзя!!! Стандартно вы запускаете систему обновления как root из терминала как обычный пользователь с помощью su. Почему? Итак, чтобы получить все ошибки и предупреждения на консоли. Особенно утилита для обновления GUI. Они ни к чему эту инфу... Помнится, в ОС windows это можно сделать. Существуют специальные функции WinAPI. Почему в линуксе этого нельзя сделать? Это не ясно...Это простая вещь!!!