ps alterna para exibir PID, PPID, PGID e SID coletivamente

39

Tentei ps com diferentes tipos de comutadores, por exemplo -A, aux, ef, etc., mas não consigo encontrar a combinação certa de comutadores que informará o ID do processo (PID), o ID do processo pai (PPID), o grupo de processos ID (PGID) e a ID da sessão (SID) de um processo na mesma saída.

JohnMerlino
fonte
ps -o <field>,<field>,.... A página do manual possui os detalhes.
Mikel
@Mikel vi que já ele não funciona no Ubuntu 12.04
JohnMerlino
1
Deve funcionar bem. Como você está executando isso? (Note-se que -ocontrola o formato de saída, mas você pode ainda quer -A, -e, -p, etc para selecionar quais processos para mostrar.)
Mikel

Respostas:

66

Aqui está:

$ ps  xao pid,ppid,pgid,sid | head
  PID  PPID  PGID   SID
    1     0     1     1
    2     0     0     0
    3     2     0     0
    6     2     0     0
    7     2     0     0
   21     2     0     0
   22     2     0     0
   23     2     0     0
   24     2     0     0

Se você deseja ver o nome do processo também, use o seguinte:

$ ps  xao pid,ppid,pgid,sid,comm | head
  PID  PPID  PGID   SID COMMAND
    1     0     1     1 init
    2     0     0     0 kthreadd
    3     2     0     0 ksoftirqd/0
    6     2     0     0 migration/0
    7     2     0     0 watchdog/0
   21     2     0     0 cpuset
   22     2     0     0 khelper
   23     2     0     0 kdevtmpfs
   24     2     0     0 netns
terdon
fonte
O que "comm" e "head" fazem?
31413 JohnMerlino
3
@JohnMerlino "comm" imprime o nome do comando e headé um comando diferente, nada a ver com psisso, apenas imprime as primeiras N linhas (10 por padrão), usei aqui para limitar o tamanho da minha resposta. Tudo o que você precisa saber sobre ps é explicado em man ps.
terdon
commnão imprime o comando completo. Por exemplo, se você executar python foo.py, comm só irá mostrar-lhe a pythonparte, mas nãopython foo.py
32r34wgf3e
1
Sim, foi por isso que eu disse que imprime o nome do comando . O comando é python, o foo.pyé o argumento do comando. Tente cmdse você quiser os argumentos também.
terdon
13

Experimentar

ps -efj | less

Especificamente, se você deseja descobrir PID / PGID / PPID / SID para um determinado ProcessName ou PID, tente:

ps -efj | grep ProcessName

ps -efj | grep PID

OU para obter uma saída com melhor formato, tente:

ps -ejf | egrep 'STIME|ProcessName'

ps -ejf | egrep 'STIME|pid'

Examples:

ps -ejf | egrep 'STIME|http'

ps -ejf | egrep 'STIME|1234'

AMOSTRA:

[ram@thinkred1cartoon ~]$ ps -ejf | egrep 'STIME|http'

UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root      1450     1  1450  1450  0 08:45 ?        00:00:04 /usr/sbin/httpd -DFOREGROUND
ram       3717     1  2589  2589  0 08:47 ?        00:00:00 /usr/libexec/gvfsd-http --spawner :1.3 /org/gtk/gvfs/exec_spaw/1
apache   11518  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11519  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11520  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11521  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache   11522  1450  1450  1450  0 09:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
Assumindo que 1234 é PID e você deseja conhecer seus PPID, PGID, SID e CMD associados
Testado no CentOS / RedHat 6.x e 7.x
Raman Kathpalia
fonte