Существуют ли процессы, у которых нет родителя?

В наивысшем рейтинге ответа на вопрос:

Если компьютеры начинают отсчет в 0, почему процесс init имеет pid из 1?

было указано, что каждый процесс имеет PPID (родительский).

Однако я прочитал (позже предоставит ссылку), что есть много процессов, у которых нет родителей.

Может ли кто-нибудь поставить противоречивые заявления в разумный контекст?

  • Ошибка: TCA_HTB_PAD не объявлен при создании ядра
  • Библиотечные подпрограммы в ядре linux
  • Тихая загрузка Linux из u-boot
  • Обнаружение потока ядра на ядрах до 3.0
  • Выберите ядро ​​для определенного оборудования
  • Процесс загрузки - изменения имени файла sdx
  • Как предотвратить отображение информации о системе на терминале?
  • Знайте, когда адрес памяти выровнен или не выровнен
  • 2 Solutions collect form web for “Существуют ли процессы, у которых нет родителя?”

    Процессы всегда имеют родительский процесс. Однако какой процесс становится новым родителем, когда существующий процесс умирает, это не обязательно PID 1. Вот как это делает Linux :

    /* * When we die, we re-parent all our children, and try to: * 1. give them to another thread in our thread group, if such a member exists * 2. give it to the first ancestor process which prctl'd itself as a * child_subreaper for its children (like a service manager) * 3. give it to the init process (PID 1) in our pid namespace */ static struct task_struct *find_new_reaper(struct task_struct *father, struct task_struct *child_reaper) { struct task_struct *thread, *reaper; thread = find_alive_thread(father); if (thread) return thread; if (father->signal->has_child_subreaper) { unsigned int ns_level = task_pid(father)->level; /* * Find the first ->is_child_subreaper ancestor in our pid_ns. * We can't check reaper != child_reaper to ensure we do not * cross the namespaces, the exiting parent could be injected * by setns() + fork(). * We check pid->level, this is slightly more efficient than * task_active_pid_ns(reaper) != task_active_pid_ns(father). */ for (reaper = father->real_parent; task_pid(reaper)->level == ns_level; reaper = reaper->real_parent) { if (reaper == &init_task) break; if (!reaper->signal->is_child_subreaper) continue; thread = find_alive_thread(reaper); if (thread) return thread; } } return child_reaper; } 

    Когда родитель процесса умирает, процесс можно сказать «не иметь родителя». Когда это произойдет, PPID устанавливается в 1, PID init .

    Каждый процесс возвращает значение $STATUS при выходе. Родитель может сделать что-то с этим значением, но он ДОЛЖЕН free память. $STATUS хранится и освобождает данные процесса в ядре.

    Interesting Posts

    Использование lftp с ssh-agent

    восстановить lvm после потери таблицы разделов

    Как сделать зашифрованный LVM-раздел grub mount

    Бэш расширенный глобус

    Использовать git pull через команду ssh invoke

    У меня есть два адаптера bluetooth для usb, которые не работают (hci1), но, по-видимому, по умолчанию. Как отключить его, чтобы я мог использовать другой (hci0)?

    Как я могу скопировать n строк после последних двух вхождений строки в файл?

    как вычислять средние значения в столбце, рассматривая информацию из другого столбца?

    Как использовать указанную версию ruby ​​для сценария оболочки с помощью rbenv?

    Какая версия Linux для практического использования сценариев / программирования Unix?

    Почему моя система замерзает, когда я пытаюсь развязать GPU с radeon?

    Регулировка контрастности при сканировании с использованием SANE

    Невозможно получить доступ к содержимому HTTP, но HTTPS и SSH прекрасны

    как запустить новое программное обеспечение без обновления GLIBC?

    Не удалось выполнить установку Grub

    Linux и Unix - лучшая ОС в мире.