Como obter apenas o usuário, o pid e o comando executado para um processo específico? (Ubuntu 11.10)

16

Quando faço ps -ef|grep python , obtenho o seguinte:

myusername  4492  2994  0 10:32 pts/0    00:00:01 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665     1  0 10:42 ?        00:00:00 /usr/bin/python /usr/lib/system-service/system-service-d
myusername 14051 13497  0 11:28 pts/7    00:00:00 grep --color=auto python

Como obtenho somente o usuário que está executando o processo, o pid e o comando são executados para o processo como no seguinte saída em vez disso?

myusername  4492 /home/myusername/.virtualenvs/myproject/bin/ipython manage.py runserver
root        6665 /usr/bin/python /usr/lib/system-service/system-service-d
    
por Bentley4 19.03.2013 / 11:40

4 respostas

11

Eu acho que você está procurando pelo argumento -o:

-o format:

user-defined format. format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns. The recognized keywords are described in the STANDARD FORMAT SPECIFIERS section below. Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output. Column width will increase as needed for wide headers; this may be used to widen up columns such as WCHAN (ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm). Explicit width control (ps opid,wchan:42,cmd) is offered too. The behavior of ps -o pid=X,comm=Y varies with personality; output may be one column named "X,comm=Y" or two columns named "X" and "Y". Use multiple -o options when in doubt. Use the PS_FORMAT environment variable to specify a default as desired; DefSysV and DefBSD are macros that may be used to choose the default UNIX or BSD columns.

Então o comando que você quer seria (Ubuntu):

ps -o uid,pid,cmd -ef|grep python

no OpenSolaris o comando é:

ps -o ruser,pid,comm -ef|grep python
    
por 19.03.2013 / 12:00
3

O mais simples provavelmente seria:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

Dessa forma, você obtém tudo diretamente de ps e não precisa analisar nada.

Na página ps man:

-o format

User-defined format. format is a single argument in the form of a blank-separated or comma-separated list, which offers a way to specify individual output columns. [...] Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

A opção -C funcionará se você estiver executando python interativamente, não se o python estiver executando um script. Nesse caso, você deve usar -C scriptname.py .

    
por 19.03.2013 / 13:40
1

Minha versão do PS é diferente, por isso pode exigir alguns ajustes, mas você pode usar o corte (e possivelmente tr dependendo do que você está tentando alcançar) - por exemplo, algo como

ps ef | cut -c1-16,50-   

Fornecerá os caracteres 1-16 e 50 de cada linha de sua instrução ps. (Seus números reais provavelmente precisarão de um pouco de massagem).

Outra maneira de fazer isso (mas você perderá a formatação) pode ser

ps ef | tr -s " " | cut -f1,2,8- -d" "

O que comprimirá o espaço em branco no comando ps e, em seguida, terá os campos 1,2 e 8 em diante e os exibirá.

    
por 19.03.2013 / 11:54
0
ps -eo user,pid,cmd | grep [p]ython

Exemplo:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
bmaupin  16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

Explicação:

  • -e todos os processos
  • -o formato definido pelo usuário
  • user,pid,cmd Mostrar usuário, ID do processo, colunas de comando

Observação: se você usar -f com -e , como outros sugeriram, poderá receber erros. Isso ocorre porque os dois parâmetros controlam o formato de saída e apenas um deles deve ser usado:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal
    
por 16.10.2018 / 21:03

Tags