ID processo utilizzando ps aux


9

Sono un principiante della programmazione shell. Supponendo di aver avviato un programma (ad esempio NetBeans) dal mio terminale, se digito

ps aux|grep netbeans

Ottengo l'output

pre      18775  1.2  0.0  12524  1972 pts/3    S    20:17   0:00 

dove 18775 specifica il PID ecc. del processo.

Poi lo uccido usando

kill 18775.

su cui scompare l'interfaccia utente di NetBeans. Se provo a ottenere il pid usando il primo comando, ottengo ancora:

pre      19137  0.0  0.0   9136  1068 pts/3    S+   20:19   0:00 grep --color=auto netbeans

Se il processo è stato interrotto, perché mostra ancora l'output di cui sopra?


1
Non ti sta mostrando il processo netbeans - sta mostrando il processo grep attraverso il quale ps aux viene convogliato! Dato che quel processo è grep netbeans, questo è il programma che vedi alla fine della riga ( grep --color=auto netbeans)
David Puglielli,

Risposte:


15

grep si sta prendendo in giro da solo. Prova qualcosa del tipo:

ps aux |grep [n]etbeans

questo impedisce a grep di mostrarsi nell'output


2
Funziona, ma non è molto bello. Potresti anche fare ps aux | grep netbeans | grep -v grep. Usa invece pgrep.
Martin Ueding,

1
@queueoverflow pgrepsarebbe carino, ma corrisponde solo al nome del processo. Il primo modello può corrispondere a qualsiasi colonna di ps. (Ad esempio, qualcosa che gira sotto Python o Java, pgrep non avrebbe preso la cosa giusta. Lo stesso con pkille così via ..)
Izkata

5

Non usare maips insieme a grep.

Piuttosto, usa killall netbeans, pkill netbeansper ucciderlo. Per l'ID del processo pgrep netbeans.

Altro su ps e grep .


5
Questo è il consiglio più inutile che abbia mai sentito. Finché le persone sanno come apparirà il processo grep nell'output di ps (inizia con "grep"), non c'è assolutamente alcun pericolo nell'usare i due insieme. Capisco il consiglio di non usare un kill in una sceneggiatura, ma non è questo il punto.
Ovangle

3
E penso che pgrep sia peggio, perché ti sta solo supplicando di "uccidere $ (pgrep vi *)" o qualcosa di incredibilmente pericoloso.
Ovangle

1
Questa è anche la risposta più inutile in questa pagina, in quanto pgrep, pkille così via solo il nome del processo di corrispondenza - tutto ciò che viene interpretato (java, python, bash, ecc ...) può essere distinto dagli altri con lo stesso nome di processo usando ps.
Izkata,

3
@Izkata: l'utilizzo di -f per pgrep e pkill corrisponderà all'intera riga di comando. A volte è utile quando cerchi di abbinare roba sotto interpreti come dici. È anche un buon modo per spararti al piede poiché ucciderà felicemente tutto ciò che fa riferimento al tuo schema ovunque nella sua riga di comando :)
Roadmr

4

Perché quello è il PID per il processo grep che è in coda per essere eseguito dopo ps aux.


@ ovangle- blink Non ci avevo mai pensato! : D grazie!
P Ramesh,

1
In realtà, grepè già in esecuzione quando ps auxviene eseguito. Durante l' ps auxesecuzione, l'output viene inviato grepall'istanza in esecuzione come input. Se la shell non fosse stata grepancora eseguita , non comparirebbe nell'output di ps.
Eliah Kagan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.