Jestem nowicjuszem w programowaniu powłoki. Zakładając, że uruchomiłem program (np. NetBeans) z mojego terminala, jeśli piszę
ps aux|grep netbeans
Dostaję wynik
pre 18775 1.2 0.0 12524 1972 pts/3 S 20:17 0:00
gdzie 18775 określa PID itp. procesu.
Potem zabijam go za pomocą
kill 18775.
na którym znika interfejs użytkownika NetBeans. Jeśli spróbuję uzyskać pid za pomocą pierwszego polecenia, nadal otrzymuję:
pre 19137 0.0 0.0 9136 1068 pts/3 S+ 20:19 0:00 grep --color=auto netbeans
Jeśli proces został zabity, dlaczego nadal wyświetla powyższą informację wyjściową?
command-line
P Ramesh
źródło
źródło
grep netbeans
, to jest program, który widzisz na końcu wiersza (grep --color=auto netbeans
)Odpowiedzi:
grep samo grepping. Wypróbuj coś takiego:
dzięki temu grep nie pokazuje się na wyjściu
źródło
ps aux | grep netbeans | grep -v grep
. Zamiast tego użyj pgrep.pgrep
byłoby miło, ale pasuje tylko do nazwy procesu. Pierwszy wzór może pasować do dowolnej kolumnyps
. (Na przykład coś działa pod python lub java, pgrep nie byłoby rzeczą właściwą grepping samo z.pkill
I tak dalej ..)Nigdy nie używaj
ps
razem zgrep
.Zamiast tego użyj
killall netbeans
,pkill netbeans
aby go zabić. Dla identyfikatora procesupgrep netbeans
.Więcej na temat ps i grep .
źródło
pgrep
,pkill
i tak dalej tylko w przypadku dopasowania nazwy procesu - wszystko, co jest interpretowane (java, python, bash itp.), Można odróżnić od innych pod tą samą nazwą procesu za pomocąps
.Ponieważ jest to PID dla procesu grep, który jest w kolejce do uruchomienia
ps aux
.źródło
grep
działa już pops aux
uruchomieniu. Podczas działaniaps aux
jego dane wyjściowe są wysyłane do działającejgrep
instancji jako dane wejściowe. Gdyby powłokagrep
jeszcze się nie wykonała , nie pojawiłaby się na wyjściups
.