Como encontrar o nome de usuário do PID no linux


16

Você pode me ajudar a encontrar o nome de usuário do PID? Algum tempo, meu servidor ficou com alta carga. Quando top -c, não consigo nem encontrar o nome de usuário do PID que está causando carga no servidor.


Estávamos enfrentando um problema de carga do servidor devido ao processo php em massa, de modo que eu tinha essa pergunta, podemos encontrá-los usando 'lsof -p xxxx'.
precisa saber é o seguinte

Respostas:


30

Estou surpreso que ninguém colocou isso ainda:

Tente a -popção para o pscomando

Por exemplo, se você tiver PID 1234, execute:

ps -u -p 1234

( -uFoi adicionado para incluir o nome de usuário na saída)

Você pode usar grepou awketc. para extrair as informações que deseja.


1
Você era um carrapato mais rápido que eu. Você está acordando mais cedo? Dependendo da distribuição do Linux, ps u 1234(Debian) ou apenas ps 1234(Android com Busybox) também funciona.
ott--

5

/proc/processID/status terá as informações sobre o ID do usuário que você pode usar para encontrar o nome de usuário.

Isso faz o mesmo:

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

Substitua YOUR_PROCESS_ID pelo seu número de identificação do processo.


3

Obtenha apenas o nome de usuário de um PID:

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

Você também pode combiná-lo com um pgrep. Neste exemplo, mostramos todos os nomes de usuário executando algum .phparquivo:

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

Encontre apenas um nome de usuário executando um determinado processo exclusivo:

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

1

O que você quer exatamente? No meu sistema, se eu executar 'top -c', recebo:

  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]                                                                                                              

Portanto, o PID (identificador de processo / tarefa) é a primeira coluna e a conta de usuário sob a qual o processus é executado é a segunda coluna


1

Eu acho que o caminho mais curto é:

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

O /proc/<pid>/loginuidarquivo possui o número de uid do usuário que está executando o processo; id -nulê uid de stdin e retorna um nome de usuário.


Agradável. Existe um arquivo de uid para nomes de usuário que você pode mapear o loginuid para um nome de usuário de string?
Cory Robinson
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.