Ma réponse est une variation de la réponse typique pour la recherche de "foobar" dans une base de données. ps
liste. L'argument de "-A" "ps"
est plus portable que "aux"
mais ce changement n'est pas pertinent pour la réponse. La réponse typique ressemble à ceci :
$ ps -A -ww | grep [f]oobar
A la place, j'utilise ce modèle :
$ ps -A -ww | grep [^]]foobar
Le principal avantage est qu'il est plus facile d'écrire des scripts basés sur ces modèles car il suffit de concaténer une chaîne statique. [^]]
avec le modèle que vous recherchez. Vous n'avez pas besoin de dépouiller la première lettre de la chaîne de caractères puis de l'insérer entre les crochets et de concaténer à nouveau le tout. Lors de l'écriture de scripts dans Shell, il est plus facile de simplement coller le [^]]
devant le modèle que vous cherchiez. Le découpage des cordes dans Bash est une chose hideuse, donc ma variation évite cela. Cette variante dit de montrer les lignes où le motif correspond SANS crochet droit en tête ]. Puisque le modèle de recherche pour exclure un crochet ajoute en fait le crochet au modèle, il ne correspondra jamais lui-même.
Ainsi, vous pourriez écrire un portable psgrep
comme suit. Ici, je tiens compte des différences entre Linux, OS X BSD, et autres. Cela ajoute les en-têtes de colonne de ps
permet de personnaliser davantage les ps
qui convient mieux à mes besoins, et affiche la liste des processus de manière extra, extra large pour qu'aucun des arguments de la ligne de commande ne soit oublié. 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 dépasseront la longueur maximale autorisée des arguments dont la table des processus garde la trace. Je crois que cette longueur est de 1024 caractères. La longueur de la commande seule autorisée pour démarrer un processus est beaucoup plus longue, mais la table des processus du noyau ne prend pas la peine de garder la trace de tout ce qui dépasse 1K de longueur. Une fois que la commande est lancée, le nom de la commande et la liste des arguments ne sont plus nécessaires, donc ce qui est stocké dans la table des processus est juste 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
}