Изменить родительский процесс процесса?

Захватите этот дескриптор и вытащите его:

instructions

14
24.01.2016, 10:08
2 ответа

Родительский идентификатор процесса (PPID) процесса не может быть изменен за пределами ядра; Нет SetPPPID System Call. Ядро изменит только PPID в (PID), только после того, как родитель процессов расторгнут - если процесс не ответил на сигнал того, что родитель был прекращен. Чтобы это произошло, процесс должен проигнорировать различные сигналы ( Sighup , SIGTERM и т. Д.)

Экран (1) имеет очень элегантные средства обработки отсоединения и присоединения. При первом запуске экран , вы на самом деле запускаете пользовательский интерфейс (UI), который по умолчанию создаст демону (менеджер сеанса). Этот демон не имеет терминала, связанного с ним, новой группой процессов ( SETPGRP (2) ), новый идентификатор сеанса ( Setsid (2) ). Демон, работающий в виде экрана , затем создает подпроцессы, подключенные к псевдоэнцерминалам ( pty ), затем мультиплексирует данные из PTYS и экрана UI ( ). Подпроцессы думают, что они разговаривают с настоящим терминалом.

Если экран UI завершает экран демона . и в собственной сессии. Когда вы воссоединитесь с новым экраном UI , то демон продолжит мультиплексировать, как это было раньше. Демон будет запущен продолжить работу, пока все подпроцессы не будут убиты, столкнутся с фатальной ошибкой или хост-перезагрузки.

14
27.01.2020, 19:51

Я понимаю. Вам нужно изменить ядро, чтобы написать какой-нибудь модуль для этого! Думаю, в некоторых случаях будет полезно. Например, вы выполняете какую-то длительную тяжелую работу, которая занимает много ресурсов в течение нескольких часов... И когда система не отвечает (, как обычно в этом случае ), вы делаете какие-то непредсказуемые действия (, потому что вам нужно сделать, и вы не убедитесь, что вы щелкнули мышью в правильном месте, чтобы система не отвечала в течение длительного времени )и случайно убивала родительский процесс. Система обычно убивает всех детей! Но если дочерний процесс является корневым, а родительский - только порядковым пользователем, и действие также делает порядковым пользователем, этот процесс не будет убит в любом случае! И его родитель будет инициализирован с PID 1. И после того, как система наконец ответит, вы захотите восстановить иерархию. Но нельзя!!! Стандартно вы запускаете систему обновления как root из терминала как обычный пользователь с помощью su. Почему? Итак, чтобы получить все ошибки и предупреждения на консоли. Особенно утилита для обновления GUI. Они ни к чему эту инфу... Помнится, в ОС windows это можно сделать. Существуют специальные функции WinAPI. Почему в линуксе этого нельзя сделать? Это не ясно...Это простая вещь!!!

-2
27.01.2020, 19:51

Теги

Похожие вопросы