Почему PS производит, показывают процесс, даже если он не работает?

Почему делает ps показывает процесс, даже если он не работает. В то время как Firefox работает:

$ echo $(ps aux | awk  '/firefox/{print $2}')
5964 6041

Но когда Firefox не работает, я пытался выполнить ту же команду. Это показало другому PID каждый раз.

Я пытался захватить его:

$ ps aux | grep firefox
greenpa+  6056  0.0  0.0  15956   948 pts/11   S+   09:29   0:00 grep --color=auto firefox

Что это значит?

2
задан 24 April 2015 в 21:04

2 ответа

И поэтому вам не следует grep или иным образом анализировать вывод ps на соответствие команды, но используйте инструменты, такие как pgrep и pidof .

Когда вы запускаете ps | grep foo , процесс grep foo также указан в ps - поэтому grep foo соответствует себе вместе с любым другим foo процессы. То же самое происходит, когда вы выполняете echo $ (ps aux | awk '/firefox/...) - команда awk соответствует самой себе.

Действительно,в зависимости от того, какой вывод вы хотите получить от ps , вам может быть лучше использовать вывод pgrep с ps . Например, состояния всех процессов Google Chrome в моей системе:

ps -p $(pgrep -d, chrome) -o pid,state

pgrep гибкость в этом отношении очень полезна - обратите внимание, как я могу указать разделитель вывода с помощью - d , затем используйте его как аргумент списка PID для ps . pgrep и pkill также могут читать из файла PID.

3
ответ дан 3 December 2019 в 06:32

Как уже указывал Муру, grep оставляет свой след в ps, однако есть небольшой обходной путь для использования grep с ps: используйте двойные кавычки и скобки на первой букве, например так ps aux | grep "[f] irefox" (Источник: https://unix.stackexchange.com/a/74186/85039 ).

3
ответ дан 10 November 2019 в 08:12

Другие вопросы по тегам:

Похожие вопросы: