J’essaie de trouver tous les processus Java en cours d’exécution dans une boîte Unix. Je suis confus entre
ps –ef|grep java
et
ps –ef|grep *.java
Lequel est correct et quelle est la différence exacte?
PS: les deux renvoient des résultats différents
Sortie de ps –ef|grep *.java
ps -ef | grep *.java aaassa1 7507 2304 0 11:49 pts/4 00:00:00 grep *.java
grep
ne fait que correspondre au texte, il n’a aucune idée du nom du processus, du nom du fichier, etc.
c’est-à-dire que si vous avez un script python appelé likejava.py
, il sera également dans le résultat.
De retour à votre question, votre *.java
n’est pas bon, car grep fonctionne avec des regex, pas des patterns globaux.
Tu pourrais essayer:
ps -ef|grep $(which java)
listera les processus java, mais seulement pour votre installation Java par défaut. Si vous avez plusieurs Java installés, par exemple votre Jboss avec java7, tomcat avec java6 et eclipse avec java5, cela échouera.
Il existe un autre outil appelé pgrep
. Vous pouvez essayer, par exemple
pgrep -l java
vous pourriez faire l’ man pgrep
pour obtenir plus d’informations:
pgrep, pkill - look up or signal processes based on name and other atsortingbutes
EDIT append un petit ps .. | grep sortingck
juste vu votre sortie dans la question:
Vous avez grep *.java
en sortie, c’est un bon exemple. grep *.java
n’est pas un processus java mais un texte “java”. donc c’est là.
Vous pouvez l’éviter par ps...|grep [j]ava
fonctionne pour bash.
Le premier est correct. Dans le second, votre shell développe le *.java
fonction de votre répertoire de travail actuel, avec des résultats amusants.
Exactement ce que ces résultats sont … Je devine ici, mais en supposant que vous avez des fichiers foo.java
et bar.java
dans votre bar.java
actuel, ce dernier est en train de faire:
ps -ef | grep bar.java foo.java
Qui, je crois , va simplement chercher bar.java dans foo.java, en ignorant les entrées de le fait est que ce n’est presque sûrement pas ce que vous voulez. ps
. Mais ne me citez pas là-dessus –