Cara menemukan nama pengguna PID di linux

17

Dapatkah Anda membantu saya menemukan nama pengguna PID, Beberapa kali server saya mendapat beban tinggi. Ketika saya top -c, saya bahkan tidak dapat menemukan nama pengguna PID yang menyebabkan load di server.

Ranjithkumar T
sumber
Kami mengalami masalah server load karena proses php massal, jadi saya punya pertanyaan ini, kami kemudian dapat menemukannya menggunakan 'lsof -p xxxx'.
Ranjithkumar T

Jawaban:

31

Saya terkejut belum ada yang memasang ini:

Coba -popsi ke psperintah.

Misalnya, jika Anda memiliki PID 1234, jalankan:

ps -u -p 1234

( -uTelah ditambahkan untuk memasukkan nama pengguna dalam output)

Anda dapat menggunakan grepatau awk, dll. Untuk mengekstrak info yang Anda inginkan.

jwd
sumber
1
Anda lebih cepat dari saya. Anda bangun lebih awal? Bergantung pada ps u 1234distribusi Linux, (Debian) atau hanya ps 1234(Android dengan Busybox) juga berfungsi.
ott--
5

/proc/processID/status akan memiliki informasi tentang ID pengguna yang dapat Anda gunakan untuk menemukan nama pengguna.

Ini melakukan hal yang sama:

uid=$(awk '/^Uid:/{print $2}' /proc/YOUR_PROCESS_ID/status)
getent passwd "$uid" | awk -F: '{print $1}'

Ganti YOUR_PROCESS_ID dengan nomor ID proses Anda.

PP
sumber
3

Dapatkan hanya nama pengguna dari PID:

PID=136323
USERNAME="$( ps -o uname= -p "${PID}" )"

Anda juga dapat menggabungkannya dengan a pgrep. Dalam contoh ini kami menunjukkan semua nama pengguna yang menjalankan beberapa .phpfile:

pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u

Temukan hanya satu nama pengguna yang menjalankan proses unik tertentu:

USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )
Jeroen Vermeulen - MageHost
sumber
1

Apa yang sebenarnya kamu inginkan? Di sistem saya, jika saya menjalankan 'top -c' saya mendapatkan:

  PID USER      PR  NI  VIRT  RES  SHR S   %CPU %MEM    TIME+  COMMAND                                                                                                                        
  2873 matt      20   0 3022m 1.6g 1.6g S     22 21.6   2245:42 /usr/lib/virtualbox/VirtualBox --comment ESX5-1 --startvm 4fd78ee9-739a-4d53-a0ce-4f9819ab9411 --no-startvm-errormsgbox        
  29764matt      20   0 2779m 1.4g 1.3g S      5 18.4 210:33.51 /usr/lib/virtualbox/VirtualBox --comment win2008-2 --startvm 202ec2b7-ae12-40e9-af76-2be429e553d7 --no-startvm-errormsgbox     
  17281root      20   0     0    0    0 S      2  0.0   0:05.90 [kworker/u:2]                                                                                                              

Jadi PID (processus / pengidentifikasi tugas) adalah kolom pertama, dan akun pengguna yang dijalankan oleh prosesus adalah kolom kedua

mbarthelemy
sumber
1

Saya pikir cara terpendek adalah:

id -nu </proc/<pid>/loginuid

The /proc/<pid>/loginuidberkas memiliki jumlah uid dari pengguna menjalankan proses; id -numembaca uid dari stdin dan mengembalikan nama pengguna.

Diego
sumber
Bagus. Apakah ada file uid ke nama pengguna sehingga Anda dapat memetakan cairan login ke nama pengguna string?
Cory Robinson