Anda dapat melihat bidang ke-5 dalam output dari /proc/[pid]/stat
.
$ ps -ejH | grep firefox
3043 2683 2683 ? 00:00:21 firefox
$ < /proc/3043/stat sed -n '$s/.*) [^ ]* [^ ]* \([^ ]*\).*/\1/p'
2683
Dari 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.
Perhatikan bahwa Anda tidak dapat menggunakan:
awk '{print $5}'
Karena file itu bukan daftar yang dipisahkan kosong. Bidang kedua (nama proses dapat berisi karakter kosong atau bahkan baris baru). Misalnya, sebagian besar utas firefox
biasanya memiliki karakter spasi dalam namanya.
Jadi, Anda perlu mencetak bidang ke-3 setelah kemunculan )
karakter terakhir di sana.
awk '{print $5}'
tidak dijamin memberi Anda jawaban yang benar karena nama proses (bidang kedua) dapat berisi spasi atau karakter baris baru.perl -l -0777 -ne '@f = /\(.*\)|\S+/g; print $f[4]' "/proc/$pid/stat"
ataup=$(cat "/proc/$pid/stat") && set ${p##*')'} && echo "$3"