Como pesquiso um processo pelo nome sem usar o grep?

62

A fim de procurar um processo que você pode usar pscom grep.

Por exemplo, para procurar firefox

ps aux | grep firefox

Como obter a mesma resposta sem usar grep?

Maythux
fonte
11
Estou curioso para saber por que você faria isso, já que a ps/grepsolução funciona tão bem?
Neuronet
OP só quer um comando mais curto, eu acho. Se houvesse algo assim ps -n <process name>, responderia à sua necessidade. ps -n firefoxé um pouco menor que ps | grep firefox. psjá pode filtrar pidou processar um ID de usuário, por isso é uma pergunta razoável filtrar o nome do processo.
Jochem Schulenklopper 7/11

Respostas:

71

O pgrepcomando e seu irmão pkillexistem precisamente para esse fim:

  • pgrep firefox listará todos os processos cujos comandos correspondem firefox
  • pgrep -f firefox listará todos os processos cujas linhas de comando inteiras correspondem firefox
  • pgrep -x firefox listará todos os processos cujos comandos correspondem exatamente firefox
  • ... e assim por diante.

E, naturalmente, pgrepse excluirá da partida, portanto, nenhum dos greprituais associados ps | grepé necessário.


O outro conjunto de ferramentas para isso são os comandos pidofe killall. Estes não são tão flexíveis quanto pgrepe pkill.

  • pidof firefox listará processos cujo comando é firefox
muru
fonte
24
ps -fC process-name

exemplo:

ps -fC firefox

de man ps

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


 -f              Do full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
Maythux
fonte
Esta é a melhor resposta, mas infelizmente não funciona no OSX. O BSD ps -Cbandeira se comporta de forma completamente diferente - "Mude a forma como a percentagem da CPU é calculado"
mastaBlasta
2

toppermite procurar uma string quando você bate em maiúsculas L; o processo será destacado e use as teclas de seta para cima e para baixo para rolar pela lista de processos. Da mesma forma, o htopcomando permite destacar um processo específico quando você pressiona /. E \filtrará todos os processos com uma sequência específica no nome.

Para quem gosta de awk, aqui está um oneliner awk: ps -eF | awk '/process-name/ {print $11}' . Com o ps -eFnome do processo está sempre na 11ª coluna. Como alternativa, se você ps -eF | awk '{print $11}' | sortreceber uma lista classificada de nomes de processos, classificados em ordem alfabética. Canalize-o no lesscomando apenas para visualizar a longa lista de arquivos com mais facilidade.

Sergiy Kolodyazhnyy
fonte
2

Um truque legal

$ps -ejH

Você receberá todos os processos com nomes

exmple:
1747   568   568 ?        00:00:00   colord
1833  1832  1832 ?        00:00:00   gnome-keyring-d
2263   568   568 ?        00:00:00   udisksd
2311  2311  2311 ?        00:00:00   cupsd
2315  2315  2311 ?        00:00:00     dbus

Redirecione ou copie a saída para um arquivo e, em seguida nano, abra , pressione Ctrl+ W e você pode procurar o nome que deseja.

daniel
fonte
1

Você também pode usar htope pressionar F4 para filtrar os resultados com uma sequência definida pelo usuário correspondente. Você também tem um recurso de pesquisa personalizado disponível pressionando F3.

JoErNanO
fonte
1

Se dois processos forem o problema, você poderá usar apenas grep:

grep firefox /proc/*/cmdline
user1497298
fonte
0

Acabei de ler este ps alias no Lennart Poettering Blog. A saída é de acordo com a parentalidade do grupo de controle systemd:

alias psc='ps xawf -eo pid,user,cgroup,args'
DDPenga
fonte