Cómo encontrar el nombre de usuario de PID en Linux


17

¿Me pueden ayudar a encontrar el nombre de usuario del PID? En algún momento mi servidor recibió mucha carga Cuando toco -c, ni siquiera puedo encontrar el nombre de usuario del PID que / que está causando carga en el servidor.


Estábamos experimentando un problema de carga del servidor debido al proceso masivo de php, por lo que tuve esta pregunta, luego podemos encontrarlos usando 'lsof -p xxxx'.
Ranjithkumar T

Respuestas:


31

Me sorprende que nadie haya puesto esto todavía:

Prueba la -popción del pscomando.

Por ejemplo, si tiene PID 1234, ejecute:

ps -u -p 1234

(Se -uagregó para incluir el nombre de usuario en la salida)

Puede usar grepo awk, etc. para extraer la información que desee.


1
Eras un tic más rápido que yo. ¿Te estás despertando antes? Dependiendo de la distribución de Linux, ps u 1234(Debian) o simplemente ps 1234(Android con Busybox) también funciona.
ott--

5

/proc/processID/status tendrá la información sobre la identificación del usuario que puede usar para encontrar el nombre de usuario.

Esto hace lo mismo:

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

Reemplace YOUR_PROCESS_ID con su número de ID de proceso.


3

Obtenga solo nombre de usuario de un PID:

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

También puedes combinarlo con a pgrep. En este ejemplo, mostramos todos los nombres de usuario que ejecutan algún .phparchivo:

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

Encuentre solo un nombre de usuario que ejecute cierto proceso único:

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

1

¿Qué quieres exactamente? En mi sistema, si ejecuto 'top -c' obtengo:

  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]                                                                                                              

Entonces, el PID (identificador de proceso / tarea) es la primera columna, y la cuenta de usuario con la que se ejecuta el proceso es la segunda columna


1

Creo que el camino más corto es:

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

El /proc/<pid>/loginuidarchivo tiene el número uid del usuario que ejecuta el proceso; id -nulee uid de stdin y devuelve un nombre de usuario.


Agradable. ¿Hay un archivo de uid a nombres de usuario que pueda asignar el loginuid a un nombre de usuario de cadena?
Cory Robinson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.