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.
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.
Jawaban:
Saya terkejut belum ada yang memasang ini:
Coba -p
opsi ke ps
perintah.
Misalnya, jika Anda memiliki PID 1234
, jalankan:
ps -u -p 1234
( -u
Telah ditambahkan untuk memasukkan nama pengguna dalam output)
Anda dapat menggunakan grep
atau awk
, dll. Untuk mengekstrak info yang Anda inginkan.
ps u 1234
distribusi Linux, (Debian) atau hanya ps 1234
(Android dengan Busybox) juga berfungsi.
/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.
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 .php
file:
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 )
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
Saya pikir cara terpendek adalah:
id -nu </proc/<pid>/loginuid
The /proc/<pid>/loginuid
berkas memiliki jumlah uid dari pengguna menjalankan proses; id -nu
membaca uid dari stdin dan mengembalikan nama pengguna.