Я новичок в программировании оболочки. Предполагая, что я запустил программу (например, NetBeans) с моего терминала, если я наберу
ps aux|grep netbeans
Я получаю выход
pre 18775 1.2 0.0 12524 1972 pts/3 S 20:17 0:00
где 18775 указывает PID и т. д. процесса.
Тогда я убиваю его
kill 18775.
после чего пользовательский интерфейс NetBeans исчезает. Если я пытаюсь получить pid с помощью первой команды, я все равно получаю:
pre 19137 0.0 0.0 9136 1068 pts/3 S+ 20:19 0:00 grep --color=auto netbeans
Если процесс был убит, почему он все еще показывает вывод выше?
command-line
П Рамеш
источник
источник
grep netbeans
, это программа, которую вы видите в конце строки (grep --color=auto netbeans
)Ответы:
grep сам по себе Попробуйте что-то вроде:
это удерживает grep от показа себя в выводе
источник
ps aux | grep netbeans | grep -v grep
. Но используйте вместо этого pgrep.pgrep
было бы неплохо, но оно соответствует только имени процесса. Первый шаблон может соответствовать любому столбцуps
. (Например, что-то, работающее под python или java, pgrep не будет корректно отображать то же самое. То же самоеpkill
и т. Д.)Никогда не используйте
ps
вместе сgrep
.Скорее используйте
killall netbeans
,pkill netbeans
чтобы убить это. Для идентификатора процессаpgrep netbeans
.Больше на ps и grep .
источник
pgrep
,pkill
и так далее, только для имени процесса сопоставления - все, что интерпретируется (java, python, bash и т. Д.), Можно отличить только от других под тем же именем процесса, используяps
,Потому что это PID для процесса grep, который ставится в очередь для запуска после
ps aux
.источник
grep
это уже работает , когдаps aux
работает. Во время выполненияps aux
его выходные данные отправляются запущенномуgrep
экземпляру в качестве входных данных. Если оболочка еще не выполненаgrep
, она не появится в выводеps
.