Cách tìm tên người dùng của PID trong linux


16

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ủ.


Chúng tôi đã gặp sự cố tải máy chủ do quá trình php hàng loạt, do đó tôi có câu hỏi này, sau đó chúng tôi có thể tìm thấy chúng bằng cách sử dụng 'lsof -p xxxx'.
Ranjithkumar T

Câu trả lời:


30

Tôi ngạc nhiên không ai đưa ra điều này:

Hãy thử -ptùy chọn cho pslệ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 grephoặc awk, vv để trích xuất thông tin bạn muốn.


1
Bạn là một đánh dấu nhanh hơn tôi. Bạn thức dậy sớm hơn? Tùy thuộc vào phân phối Linux, ps u 1234(Debian) hoặc chỉ ps 1234(Android với Busybox) cũng hoạt động.
ott--

5

/proc/processID/status sẽ có thông tin về ID người dùng mà bạn có thể sử dụng để tìm tên người dùng.

Điều này cũng làm như vậy:

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

Thay thế MY_PROCESS_ID bằng số ID quy trình của bạn.


3

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ố .phptệ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 )

1

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


1

Tôi nghĩ cách ngắn nhất là:

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

Các /proc/<pid>/loginuidtậ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.


Đẹp. Có một tập tin uid cho tên người dùng mà bạn có thể ánh xạ loginuid thành một tên người dùng chuỗi không?
Cory Robinson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.