Ma réponse est une variation de la réponse typique pour la recherche de "foobar" dans une ps
liste. L’argument de "-A" "ps"
est plus portable que "aux"
, je crois, mais ce changement n’a aucune incidence sur la réponse. La réponse typique ressemble à ceci:
$ ps -A -ww | grep [f]oobar
Au lieu de cela, j'utilise ce modèle:
$ ps -A -ww | grep [^]]foobar
L'avantage principal est qu'il est plus facile d'écrire des scripts basés sur ces modèles, car vous concaténez simplement une chaîne statique [^]]
avec le modèle que vous recherchez. Vous n'avez pas besoin de retirer la première lettre de la chaîne, de l'insérer entre les accolades puis de la concaténer à nouveau. Lors de la création de scripts dans le shell, il est plus facile de coller [^]]
devant le motif recherché. Le tranchage de cordes dans Bash est une chose laide, ma variante l’évite donc. Cette variation indique de montrer les lignes où le motif correspond SANS un crochet de droite]. Etant donné que le modèle de recherche pour exclure un crochet ajoute le crochet au modèle, il ne se correspondra jamais.
Ainsi, vous pouvez écrire une psgrep
commande portable comme suit. Ici, je tiens compte des différences entre Linux, OS X BSD et d’autres. Cela ajoute les en-têtes de colonne de ps
, fournit un plus personnaliséps
format qui convient mieux à mes besoins, et affiche les processus listant extra, extra large afin qu’aucun des arguments de la ligne de commande ne manque. Eh bien, la plupart ne sont pas manqués. Java étant Java, il fait souvent les choses de la pire façon possible, de sorte que certains services java fonctionneront au-delà de la longueur maximale autorisée des arguments que la table de processus va suivre. Je crois que c'est 1024 caractères. La longueur autorisée par commande permettant de démarrer un processus est beaucoup plus longue, mais la table des processus du noyau ne prend pas la peine de garder trace de tout ce qui dépasse 1K. Une fois la commande lancée, le nom de la commande et la liste d'arguments ne sont plus nécessaires. Par conséquent, ce qui est stocké dans la table de processus est simplement informatif.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.+1 pour la réponse laconique de @jamzed, cependant le PO pourrait avoir besoin d'explications:
En utilisant cette expression rationnelle, vous lancez un processus auquel sa chaîne ps ne correspondra pas, car l'expression rationnelle correspond
"django"
et non"[d]jango"
. De cette façon, vous excluez le processus contenant la chaîne "[d] jango" qui, dans ce cas, est grep; La même chose peut être appliquée à pgrep, egrep, awk, sed, etc ... quelle que soit la commande que vous avez utilisée pour définir l'expression régulière.De l'homme 7 regex
la source
ps aux | grep [s]cript1
. Pourriez-vous aider à commenter sur la solution?ps | grep [d]jango
ps | grep d[j]ango
...
ps | grep djang[o]
la source
ps aux| grep "[Z] "
ps aux | grep [s]cript1
oups aux | grep [s]cript2
. La ligne grep est toujours affichée. Pourriez-vous aider à commenter sur la solution?Utilisez pgrep à la place:
pgrep -lf django
la source
pgrep
me donne exactement ce problème. Mais je dois dire que je le teste dans CygWin (oùps
ne peut pas afficher la ligne de commande complète du processus).pgrep
correspondait. Il s'avère que cela correspond au nom dubash
fichier de script à partir duquel je l'exécutais. L'ajout l'a-x
corrigé, alors il fait une correspondance exacte sur le nom de la commande.Oh, attends, ça marche:
la source
grep
, vous ne pouvez pas compter sur dans le cas général.ps -d | grep django
de l'homme ps:
la source
ps
sont notoirement non-portables, donc sans information sur la plate-forme à laquelle cela est destiné, cette réponse n'est pas très utile. De plus, cela n’est évidemment pas suffisant lorsque vous n'êtes pas sûr que le processus que vous recherchez n’est pas un leader de processus (c’est-à-dire que cela peut vous aider si votre cible est un démon, mais généralement pas autrement).