Bạn có thể giúp tôi tìm tên người dùng của PID không, đôi khi máy chủ của tôi tải cao. Khi tôi top -c, tôi thậm chí không thể tìm thấy tên người dùng của PID, người đang gây ra tải trên máy chủ.
Bạn có thể giúp tôi tìm tên người dùng của PID không, đôi khi máy chủ của tôi tải cao. Khi tôi top -c, tôi thậm chí không thể tìm thấy tên người dùng của PID, người đang gây ra tải trên máy chủ.
Câu trả lời:
Tôi ngạc nhiên không ai đưa ra điều này:
Hãy thử -p
tùy chọn cho ps
lệnh.
Ví dụ: nếu bạn có PID 1234
, hãy chạy:
ps -u -p 1234
( -u
Đã được thêm vào để bao gồm tên người dùng trong đầu ra)
Bạn có thể sử dụng grep
hoặc awk
, vv để trích xuất thông tin bạn muốn.
ps u 1234
(Debian) hoặc chỉ ps 1234
(Android với Busybox) cũng hoạt động.
Chỉ nhận tên người dùng từ một PID:
PID=136323
USERNAME="$( ps -o uname= -p "${PID}" )"
Bạn cũng có thể kết hợp nó với a pgrep
. Trong ví dụ này, chúng tôi hiển thị tất cả tên người dùng thực thi một số .php
tệp:
pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u
Chỉ tìm một tên người dùng đang chạy một quy trình duy nhất:
USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )
Bạn muốn chính xác những gì? Trên hệ thống của tôi, nếu tôi chạy 'top -c' tôi sẽ nhận được:
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]
Vì vậy, PID (mã định danh processus / task) là cột đầu tiên và tài khoản người dùng mà processus chạy bên dưới là cột thứ hai
Tôi nghĩ cách ngắn nhất là:
id -nu </proc/<pid>/loginuid
Các /proc/<pid>/loginuid
tập tin có số uid của người sử dụng chạy quá trình này; id -nu
đọc uid từ stdin và trả về tên người dùng.