Je suis un débutant dans la programmation de shell. En supposant que j'ai démarré un programme (par exemple NetBeans) à partir de mon terminal, si je tape
ps aux|grep netbeans
Je reçois la sortie
pre 18775 1.2 0.0 12524 1972 pts/3 S 20:17 0:00
où 18775 spécifie le PID, etc. du processus.
Ensuite, je le tue en utilisant
kill 18775.
sur lequel l'interface utilisateur NetBeans disparaît. Si j'essaye d'obtenir le pid en utilisant la première commande, j'obtiens toujours:
pre 19137 0.0 0.0 9136 1068 pts/3 S+ 20:19 0:00 grep --color=auto netbeans
Si le processus a été interrompu, pourquoi affiche-t-il toujours la sortie ci-dessus?
command-line
P Ramesh
la source
la source
grep netbeans
, c'est le programme que vous voyez à la fin de la ligne (grep --color=auto netbeans
)Réponses:
grep se salue. Essayez quelque chose comme:
cela empêche grep de se montrer dans la sortie
la source
ps aux | grep netbeans | grep -v grep
. Mais utilisez pgrep à la place.pgrep
serait bien, mais il ne correspond qu'au nom du processus. Le premier motif peut correspondre à n'importe quelle colonne deps
. (Par exemple, quelque chose fonctionnant sous python ou java, pgrep ne saluerait pas la bonne chose. Même chose avecpkill
et ainsi de suite ..)Ne jamais utiliser
ps
avecgrep
.Au contraire, utiliser
killall netbeans
,pkill netbeans
pour le tuer. Pour l'ID de processuspgrep netbeans
.Plus sur ps et grep .
la source
pgrep
,pkill
et ainsi de suite le nom du processus de correspondance uniquement - quoi que ce soit interprété (java, python, bash, etc ...) ne peut être distingué des autres sous le même nom de processus en utilisantps
.Parce que c'est le PID du processus grep qui est mis en file d'attente pour s'exécuter ensuite
ps aux
.la source
grep
est déjà en cours d'exécution lors de l'ps aux
exécution. Lors de l'ps aux
exécution, sa sortie est envoyée à l'grep
instance en cours d'exécution en tant qu'entrée. Si le shell n'avait pasgrep
encore été exécuté , il n'apparaîtrait pas dans la sortie deps
.