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.


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.


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.


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 )

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


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.


Bagus. Apakah ada file uid ke nama pengguna sehingga Anda dapat memetakan cairan login ke nama pengguna string?
Cory Robinson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.