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

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

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

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

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

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

  • Недопустимый путь сборки для создания драйвера
  • Что означают опции ядра в фигурных скобках?
  • Pinnacle TV-тюнер, ошибка чтения, dvb_register не удалось, cx8802 не удалось пробить, прошивка никогда не загружается
  • ядро реального времени / низкая латентность происходит от источника ванили
  • lshw segfaults на Linux> = 4.8 из-за упрощенной пользовательской копии на многих компьютерах
  • В Solaris 10 и 11 все еще используется распределение slab для их распределителя памяти ядра
  • В чем разница между выводами dmesg и / var / log / messages?
  • В чем разница между прерываниями локального таймера и таймером?
  • 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

    Резервное копирование TAR на удаленный сервер

    Удалите n-ю строку из сопоставленной строки (которая встречается только один раз в файле)

    избегать множественных труб, поврежденных из-за отсутствия команды

    Как скопировать текст виртуального терминала из графического режима?

    Ресурс (время и память процессора) ограничение и прекращение процесса при нарушении в Linux

    Какая была старая Linux-игра для программистов, имитирующая жизнь на сетке пикселей?

    внешние соединения неиспользуемым gvfsd-smb?

    Подключиться к Linux-машине за брандмауэром

    Название «уведомлено» ресурсом из «уведомленного» ресурса в кукольном

    Как установить значение для mteHotContextName при использовании процесса мониторинга в SNMP

    Простой эмулятор терминала (с возможностью записи) с меткой-копией с «универсальным» $ TERM

    Различия между ядрами Debian bigmem и amd64

    Насколько большой должен быть раздел rootfs в Arch Linux?

    В чем недостаток наличия многих инодов?

    Как найти частоту появления строк, содержащихся в файле?

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