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

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

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

  • Измените драйвер адаптера беспроводной сети в Linux
  • Добавление нового системного вызова в Linux 3.2.x с загружаемым модулем ядра
  • структура каталогов против файловой системы
  • Использование памяти в Linux?
  • Виртуальная схема памяти ядра: отрицательные значения
  • Как дождаться завершения процесса копирования (cp)?
  • было указано, что каждый процесс имеет PPID (родительский).

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

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

  • Какой из следующих кодов будет работать в том же процессе текущей оболочки
  • Где происходит системная информация из
  • Проверить, что процесс уже запущен в webfaction?
  • Убить процесс на определенном порту
  • Где хранятся глобальные переменные ядра?
  • Может ли ошибка в модуле ядра привести к сбою системы?
  • 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 - лучшая ОС в мире.