Linux'ta PID kullanıcı adı nasıl bulunur?


17

PID'nin kullanıcı adını bulmama yardım edebilir misin? Bir süre sunucumun yükü arttı. I -c olduğunda, sunucuda yüke neden olan / PID'nin kullanıcı adını bile bulamıyorum.


Toplu php işlemi nedeniyle sunucu yükleme sorunu yaşıyorduk, bu yüzden bu soruyu yaşadım, daha sonra bunları 'lsof -p xxxx' kullanarak bulabiliriz.
Ranjithkumar T

Yanıtlar:


31

Kimsenin bunu henüz yüklemediğine şaşırdım:

Komut -pseçeneğini deneyin ps.

Örneğin, PID'niz varsa 1234çalıştırın:

ps -u -p 1234

( -uÇıktıya kullanıcı adını eklemek için eklendi)

İstediğiniz bilgileri ayıklamak için grepveya awkvb.


1
Benden daha hızlı bir kene oldun. Daha erken mi uyanıyorsunuz? Linux güvensizliğine bağlı olarak, ps u 1234(Debian) veya sadece ps 1234(Busybox ile Android) de çalışır.
ott--

5

/proc/processID/status kullanıcı adını bulmak için kullanabileceğiniz kullanıcı kimliği hakkında bilgiye sahip olacaktır.

Bu aynı şeyi yapar:

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

YOUR_PROCESS_ID değerini işlem kimlik numaranızla değiştirin.


3

Bir PID'den yalnızca kullanıcı adı alın:

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

Ayrıca a ile birleştirebilirsiniz pgrep. Bu örnekte, bazı .phpdosyaları yürüten tüm kullanıcı adlarını gösteriyoruz :

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

Belirli bir benzersiz işlemi çalıştıran yalnızca bir kullanıcı adı bulun:

USERNAME="$( pgrep -nf 'script\.php' | xargs -r ps -o uname= -p )

1

Tam olarak ne istiyorsun? Sistemimde, 'top -c' çalıştırırsam:

  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]                                                                                                              

Yani PID (süreç / görev tanımlayıcı) ilk sütundur ve işlemin altında çalıştığı kullanıcı hesabı ikinci sütundur


1

Bence en kısa yol:

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

/proc/<pid>/loginuidDosya işlemini çalıştıran kullanıcının kimliği numarası vardır; id -nustdin'den uid okur ve bir kullanıcı adı döndürür.


Güzel. Loginuid'i bir dize kullanıcı adıyla eşleştirebileceğiniz kullanıcı adlarına uid dosyası var mı?
Cory Robinson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.