Что означает `init ` в столбце COMMAND ps?

Чтение Что означают скобки вокруг процессов? Я понимаю, что имя исполняемого файла напечатано.

Linux ps man page:

  • Почему процессы не заполняют пустые идентификаторы процессов
  • Лучше ли передавать все файлы в mv или параллельно запускать несколько процессов mv?
  • Как система использует /etc/init.d скрипты?
  • Как подождать, пока команда mv завершится в unix?
  • Как проверить, установлен ли vim?
  • Уровни запуска SysV
  • Иногда процесс args будет недоступен; Когда это произойдет, ps вместо этого напечатает имя исполняемого файла в скобках.

    Однако с ps -Awwo pid,comm,args я получаю:

      PID COMMAND COMMAND 1 init init [2] 

    Что это значит? Предполагается ли «исполняемое имя» быть init или [2] ?

    Я полагаю, что исполняемый файл, конечно же, init – что [2] ? Почему он печатается?

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

  • Как слить два файла * .avi в один
  • unix для печати до 3-го появления «/» в каждой строке
  • Когда я запускаю «sudo su», я получаю команду --bash: команда не найдена для всего
  • Как перечислить все запущенные X-приложения?
  • Извлечь параметры tomcat из вывода ps
  • Создать постоянный процесс без inittab
  • One Solution collect form web for “Что означает `init ` в столбце COMMAND ps?”

    Как столбец comm и первое слово столбца args в выводе ps показывают имя исполняемой программы, если все участники соответствуют стандарту. Однако возможны расхождения по разным причинам.

    Когда запускается программа, имя команды, как показано в столбце args выбирается родительской программой, которая выполняет программу и передается в качестве аргумента ( argv[0] ). По соглашению родитель выбирает базовое имя исполняемого файла (то есть путь к исполняемому файлу без части каталога), но это не применяется. Как только программа запущена, она может перезаписать эту строку.

    Init (по крайней мере, традиционный Linux SysVinit) перезаписывает свой argv[0] чтобы указать текущий уровень выполнения .

    В Linux столбец comm первоначально заполняется ядром до первых 16 символов базового имени исполняемого файла. Процесс может изменить содержимое с помощью системного вызова prctl .

    Если исполняемый файл переименован или удален, ни столбец comm , ни столбец args не отражают это.

    ps не отображает путь к исполняемому файлу, который не находится в описании задания. lsof может сказать вам lsof -a -p 1 -d txt .

    В Linux вы можете увидеть эту информацию в файлах в /proc/ PID / :

    • Имя процесса (поле comm ) в /proc/1/stat (второе поле в круглых скобках) и /proc/1/status (поле Name ).
    • Путь к исполняемому файлу через /proc/1/exe .
    • Аргументы (начиная с argv[0] ) в /proc/1/cmdline (аргументы разделяются пустым байтом).
    Linux и Unix - лучшая ОС в мире.