Estou em um sistema Debian 8 tentando determinar os processos e seu respectivo tempo de execução de um determinado usuário:
$ ps -u <user>
PID TTY TIME CMD
26038 ? 00:00:00 php5-fpm
26052 ? 00:00:00 php5-fpm
26950 ? 00:00:00 php5-fpm
27344 ? 00:00:00 php5-fpm
28292 ? 00:00:00 php5-fpm
28691 ? 01:54:21 python3 /usr/lo
$ which ps # ps is not aliased or so.
/bin/ps
Agora eu também quero o tempo decorrido para os respectivos processos. Então eu tentei:
$ ps -o cmd=,etime= -u <user>
php-fpm: pool <user> 00:36
php-fpm: pool <user> 00:36
php-fpm: pool <user> 00:24
php-fpm: pool <user> 00:18
php-fpm: pool <user> 00:04
python3 /usr/local/bin/fixw 17:39:44
No entanto, quero ter os nomes curtos do processo php-fpm
como na primeira saída, não os nomes longos da segunda. Não consegui encontrar nenhuma maneira de fazê-lo, lendo ps
a página de manual do .
Como obtenho o CMD da saída #1 com o tempo decorrido da saída #2?
Solução A resposta do @StephenKitt foi a dica que faltava. No entanto, eu precisava modificá-lo um pouco. Saída estranha:
$ ps -o comm=,etime= -u <user>
,etime=
php5-fpm
php5-fpm
php5-fpm
php5-fpm
php5-fpm
ps
python3 /usr/lo
Opções separadas funcionam:
$ ps -o comm= -o etime= -u <user>
php5-fpm 00:55
php5-fpm 00:27
php5-fpm 00:24
php5-fpm 00:13
php5-fpm 00:08
python3 /usr/lo 17:49:38
Apesar do nome da coluna, a saída que você está procurando é
comm
em vez decmd
:cmd
é um alias não padrão paraargs
e mostra o comando com todos os seus argumentos, incluindo quaisquer modificações que o processo tenha feito.comm
éo nome do processo que no Linux por omissãoéos primeiros 15 bytes do nome base doúltimo ficheiro que o processo executou (ouéo mesmo nome do seu processo pai se não executou nenhum ficheiro, ou o nome da tarefa para o kernel tarefas), e pode ser modificado com oPR_SET_NAME
prctl()
.Observe que
etime
é a quantidade de tempo desde que o processo foi gerado e um processo pode (e geralmente o faz) executar mais de um comando em sua vida, portanto, se você vircmd 00:03
, isso não significa necessariamente quecmd
está sendo executado por 3 segundos, o processo que está sendo executado no momentocmd
poderia muito bem ter executado algum outro comando antes.O processo em execução
ps
estava em execução anteriormente,sh
durante o qual passava a maior parte do tempo aguardando outro processo em execuçãosleep
(depois de ter sido executadosh
por um período muito curto).