Bonjour, j’ai cherché dans divers forums et ici aussi, j’ai pu trouver des réponses pour Linux et Mac mais je n’ai pas pu trouver de solution pour Unix et spécialement Korn Shell.
Comment obtenir le nom du processus (nom de la commande) à partir de l'ID de processus (pid)
Ci-dessous, référence trouvée dans SO Celui-ciEt celui-ci aussi
J'ai essayé en dessous de la commande
ps -eaf | awk '{ print substr($0, index($0, $9)) }'
La commande ci-dessus échoue à un moment où TIME est donné plutôt que Mois et Date (car dans ce cas, la chaîne ne comportera que 8 colonnes)
Toute suggestion aiderait.
Je pense qu'il est plus facile d'utiliser pgrep
$ pgrep bluetoothd
441
Sinon, vous pouvez utiliser awk
:
ps -ef | awk '$8=="name_of_process" {print $2}'
Par exemple, si ps -ef
a une ligne comme celle-ci:
root 441 1 0 10:02 ? 00:00:00 /usr/sbin/bluetoothd
Alors ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}'
renvoie 441
.
En ksh, pgrep est introuvable. et l'autre solution échoue au cas où La sortie ci-dessous provient de la commande ps jaggsmca325 7550 4752 0 11 sept./44 0:00 sqlplus dummy_user/dummy_password @ dummy_schema
Vérifions la dernière colonne ($NF
), peu importe son numéro:
$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441
Si vous voulez faire correspondre des chaînes non exactes, vous pouvez utiliser ~
à la place:
$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906
Si votre solution ps | awk
échoue parce que la sortie de ps
n'est pas celle que vous souhaitez, définissez-la ainsi:
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps -C <the-name> -o etime=
Mon ps est de procps-ng.