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 -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.
ps u 1234distribusi 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 .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 )
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>/loginuidberkas memiliki jumlah uid dari pengguna menjalankan proses; id -numembaca uid dari stdin dan mengembalikan nama pengguna.