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

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

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

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

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

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

  • Что такое ядро, «инструменты и утилиты GNU», оболочка и диспетчер окон?
  • Установите новое ядро ​​в PowerPC debian
  • Установка драйвера, источник ядра не найден
  • Asus X101H - сенсорная панель не распознана (требуется отключить при наборе текста)
  • Иногда нет звука во флэш-видео после загрузки?
  • Как я могу написать dmesg из командной строки?
  • Использовать aes-ni в Debian
  • является THP хорошим или плохим для MySQL Server?
  • 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 хранится и освобождает данные процесса в ядре.

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