Respostas:
pgrep
As opções de saída do são bastante limitadas. Você quase certamente precisará enviá-lo de volta ps
para obter as informações importantes. Você pode automatizar isso usando uma função bash no seu ~/.bashrc
.
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
Em seguida, chame o comando com.
ppgrep <pattern>
ps
necessário um hífen para os sinalizadores:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
que somente executará o comando se tiver recebido uma lista.
ps fp $(pgrep -d, "$@")
Combine pgrep
com o ps
uso xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
Por exemplo, tente
pgrep -u user | xargs ps -f -p
para obter uma lista completa de processos user
.
É bom que você mantenha a primeira linha com os nomes das colunas. grep
sempre descarta os nomes das colunas.
A seguir, você fornece apenas PID + linha de comando completa. Para "todas as informações ps
", consulte outras respostas ...
A maioria dos linuxes usa procps-ng . Desde o 3.3.4 (lançado em 2012), pgrep -a
( --list-full
) mostra a linha de comando completa.
Nota: Por padrão, o pgrep corresponde apenas ao padrão fornecido com o nome do executável. Se você deseja comparar com a linha de comando completa (como grepping ps faz), adicione a opção -f
( --full
).
Nas versões mais antigas (incluindo o projeto procps original ), a -l
opção mostrava informações, mas seu comportamento variava:
pgrep -fl
combinou o padrão com a linha de comando completa e mostrou a linha de comando completa.pgrep -l
sozinho correspondia apenas ao nome do executável e mostrava apenas o nome do executável. Não tenho certeza de qual código o BSD usa, mas sua página de manual documenta o -fl
comportamento antigo .
Infelizmente você não pode nem usar -fl
portável - nos procps-ng recentes, -f
( --list-name
) sempre imprime apenas o nome do executável.
Para a versão de GNU pgrep
o -i
(caso-insensibilidade) não é suportada, e comprida + saída distorcido é conseguido com -af
.
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
-a, --list-full
List the full command line as well as the process ID. (pgrep only.)
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
No OSX (e por inferência, no BSD) -l
( saída longa ), em combinação com -f
( correspondência com listas completas de argumentos ), será exibido o comando completo ( -i
adiciona distinção entre maiúsculas e minúsculas):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [mux] t
A página do manual :
-l Long output. For pgrep, print the
process name in addition to the
process ID for each matching
process. If used in conjunction
with -f, print the process ID and
the full argument list for each
matching process. For pkill, dis-
play the kill command used for
each process killed.
Use a opção -v para grep - ele retorna tudo, exceto o padrão solicitado.
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
Eu não acho que exista, o máximo de informações que você pode obter é o nome e a identificação do processo usando a opção -l no pgrep.
O ps suporta todos os tipos de opções de formatação, por isso, basta criar um alias para o que você deseja salvar a digitação. Uma maneira simples de excluir o processo grep da saída é incluir um canal adicional grep -v grep
para excluir qualquer processo grep.
Para eliminar o grep
processo, você pode usar colchetes como parte do seu padrão:
ps -ef | grep '[t]ty'
Você pode fazer isso com ps
e pgrep
:
ps -fp $(pgrep -d, tty)
Isso irá ajudá-lo, eu acho:
ps auxww
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
Caso contrário, se nenhum processo corresponder à sua pesquisa, ele despeja toda umaps
megilla de uso.