Como obter todos os ids do processo em execução apenas?

7

Eu sei que

ps ax

retorna os pids

1 ?        Ss     0:01 /sbin/init
2 ?        S<     0:00 [kthreadd]
3 ?        S<     0:00 [migration/0]

Tudo o que preciso é limpar essas cadeias, mas não consegui fazê-lo com sed porque não consegui escrever o regex adequado. Você poderia me ajudar?

    
por Jader Dias 12.08.2009 / 20:29

3 respostas

18

Use a formatação de saída do ps:

ps -A -o pid

A formatação de saída do comando é a melhor opção. A opção o controla a formatação de saída. Eu listei alguns dos argumentos abaixo, veja 'man ps' para o resto (para usar múltiplos, seria -o pid,cmd,flags ).

KEY   LONG         DESCRIPTION
   c     cmd          simple name of executable
   C     pcpu         cpu utilization
   f     flags        flags as in long format F field
   g     pgrp         process group ID
   G     tpgid        controlling tty process group ID
   j     cutime       cumulative user time
   J     cstime       cumulative system time
   k     utime        user time
   o     session      session ID
   p     pid          process ID

Awk ou Cut seria melhor para obter colunas:
Geralmente você não iria querer um regex para selecionar a primeira coluna, você iria querer canalizá-lo para cortar ou awk para cortar a primeira coluna como:

ps ax | awk '{print $1}'

Regex é uma opção, se não a melhor:
Se você fosse usar regex, poderia ser algo como:

ps ax | perl -nle 'print $1 if /^ *([0-9]+)/'

$ 1 imprime apenas o que foi correspondido entre parênteses. ^ ancora o para o começo da linha. Asterisco de espaço significa permitir caracteres de espaço opcionais antes do número. [0-9] + significa um ou mais dígitos. Mas eu não recomendaria o regex para essa tarefa em particular, veja por quê? : -)

    
por 12.08.2009 / 20:31
6
ps ax | awk '{ print $1; }'
    
por 12.08.2009 / 20:37
3

Use o interruptor -o para obter uma saída no formato cust

ps -o pid

A maneira ruim de usar o sed, como você pediu explicitamente, pode ser

ps -ax | sed 's#^\( *[0-9]\+\) .*$##'
    
por 12.08.2009 / 20:32