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
.