Vous pouvez regarder le champ 5 en sortie de /proc/[pid]/stat
.
$ ps -ejH | grep firefox
3043 2683 2683 ? 00:00:21 firefox
$ < /proc/3043/stat sed -n '$s/.*) [^ ]* [^ ]* \([^ ]*\).*/\1/p'
2683
De man proc
:
/proc/[pid]/stat
Status information about the process. This is used by ps(1). It is defined in /usr/src/linux/fs/proc/array.c.
The fields, in order, with their proper scanf(3) format specifiers, are:
pid %d The process ID.
comm %s The filename of the executable, in parentheses. This is visible whether or not the executable is swapped out.
state %c One character from the string "RSDZTW" where R is running, S is sleeping in an interruptible wait, D is waiting in
uninterruptible disk sleep, Z is zombie, T is traced or stopped (on a signal), and W is paging.
ppid %d The PID of the parent.
pgrp %d The process group ID of the process.
session %d The session ID of the process.
Notez que vous ne pouvez pas utiliser:
awk '{print $5}'
Parce que ce fichier n'est pas une liste séparée vierge. Le deuxième champ (le nom du processus peut contenir des blancs ou même des caractères de nouvelle ligne). Par exemple, la plupart des threads de firefox
ont généralement des caractères d'espace dans leur nom.
Vous devez donc imprimer le 3ème champ après la dernière occurrence d'un )
caractère.
awk '{print $5}'
n'est pas garanti de vous donner la bonne réponse car le nom du processus (deuxième champ) peut contenir des espaces ou des caractères de nouvelle ligne.perl -l -0777 -ne '@f = /\(.*\)|\S+/g; print $f[4]' "/proc/$pid/stat"
oup=$(cat "/proc/$pid/stat") && set ${p##*')'} && echo "$3"