Jak znaleźć nazwę użytkownika PID w systemie Linux

17

Czy możesz mi pomóc znaleźć nazwę użytkownika PID, Kiedyś mój serwer został obciążony. Kiedy top -c, nie mogę nawet znaleźć nazwy użytkownika PID, który / który powoduje obciążenie serwera.

Ranjithkumar T.
źródło
Wystąpił problem z obciążeniem serwera z powodu masowego procesu php, więc gdy miałem to pytanie, możemy je znaleźć za pomocą 'lsof -p xxxx'.
Ranjithkumar T

Odpowiedzi:

31

Dziwię się, że nikt tego jeszcze nie powiedział:

Wypróbuj -popcję pspolecenia.

Na przykład, jeśli masz PID 1234, uruchom:

ps -u -p 1234

( -uZostał dodany, aby uwzględnić nazwę użytkownika w danych wyjściowych)

Możesz użyć greplub awkitp., Aby wyodrębnić żądane informacje.

jwd
źródło
1
Byłeś szybszy ode mnie. Budzisz się wcześniej? W zależności od rozproszenia Linuksa działa również ps u 1234(Debian) lub po prostu ps 1234(Android z Busybox).
ott--
5

/proc/processID/status będzie zawierał informacje o identyfikatorze użytkownika, których możesz użyć do znalezienia nazwy użytkownika.

To robi to samo:

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

Zastąp YOUR_PROCESS_ID swoim numerem identyfikacyjnym procesu.

PP
źródło
3

Uzyskaj tylko nazwę użytkownika z PID:

PID=136323
USERNAME="$( ps -o uname= -p "${PID}" )"

Możesz także połączyć to z pgrep. W tym przykładzie pokazujemy wszystkie nazwy użytkowników wykonujące jakiś .phpplik:

pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u

Znajdź tylko jedną nazwę użytkownika uruchamiającą określony unikalny proces:

USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )
Jeroen Vermeulen - MageHost
źródło
1

Czego dokładnie chcesz? W moim systemie, jeśli uruchomię „top -c”, otrzymuję:

  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]                                                                                                              

PID (identyfikator procesu / zadania) to pierwsza kolumna, a konto użytkownika, na którym działa procesus, to druga kolumna

mbarthelemy
źródło
1

Myślę, że najkrótsza droga to:

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

/proc/<pid>/loginuidPlik ma numer UID użytkownika uruchamiającego proces; id -nuodczytuje UID ze standardowego wejścia i zwraca nazwę użytkownika.

Diego
źródło
Ładny. Czy istnieje plik UID dla nazw użytkowników, który można zmapować loginuid na ciąg nazwy użytkownika?
Cory Robinson,