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.
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.
Odpowiedzi:
Dziwię się, że nikt tego jeszcze nie powiedział:
Wypróbuj -p
opcję ps
polecenia.
Na przykład, jeśli masz PID 1234
, uruchom:
ps -u -p 1234
( -u
Został dodany, aby uwzględnić nazwę użytkownika w danych wyjściowych)
Możesz użyć grep
lub awk
itp., Aby wyodrębnić żądane informacje.
ps u 1234
(Debian) lub po prostu ps 1234
(Android z Busybox).
/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.
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ś .php
plik:
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 )
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
Myślę, że najkrótsza droga to:
id -nu </proc/<pid>/loginuid
/proc/<pid>/loginuid
Plik ma numer UID użytkownika uruchamiającego proces; id -nu
odczytuje UID ze standardowego wejścia i zwraca nazwę użytkownika.