Minha resposta é uma variação da resposta típica para procurar "foobar" em uma ps
listagem. O argumento de "-A" "ps"
é mais portátil do que "aux"
, acredito, mas essa mudança é irrelevante para a resposta. A resposta típica é assim:
$ ps -A -ww | grep [f]oobar
Em vez disso, uso este padrão:
$ ps -A -ww | grep [^]]foobar
A principal vantagem é que é mais fácil escrever scripts com base nesses padrões, porque você simplesmente concatena uma sequência estática [^]]
com qualquer padrão que esteja procurando. Você não precisa retirar a primeira letra da string, depois inseri-la entre os colchetes e concatenar isso novamente. Ao criar scripts no shell, é mais fácil ficar [^]]
na frente do padrão que você estava procurando. Fatiar cordas no Bash é uma coisa feia, então minha variação evita isso. Essa variação indica as linhas em que o padrão corresponde SEM um colchete quadrado à direita]. Como o padrão de pesquisa para excluir um colchete, na verdade, adiciona o colchete ao padrão, ele nunca será correspondido.
Então você pode escrever um psgrep
comando portátil da seguinte maneira. Aqui, considero algumas diferenças entre Linux, OS X BSD e outros. Isso adiciona os cabeçalhos das colunas ps
, fornece uma configuração mais personalizadaps
formato que melhor se adapte às minhas necessidades e exibe processos que listam extra, extra largo, para que nenhum dos argumentos da linha de comando seja esquecido. Bem, a maioria não faz falta. Java sendo Java, geralmente faz as coisas da pior maneira possível; portanto, alguns serviços java executam o comprimento máximo permitido de argumentos que a tabela de processos acompanhará. Acredito que sejam 1024 caracteres. O tamanho do comando único que é permitido iniciar um processo é muito mais longo, mas a tabela de processos do kernel não se preocupa em rastrear algo com mais de 1K de comprimento. Depois que o comando é iniciado, a lista de argumentos e nomes de comandos não é necessária; portanto, o que é armazenado na tabela de processos é apenas informativo.
psgrep ()
{
pattern=[^]]${1};
case "$(uname -s)" in
Darwin)
ps -A -ww -o pid,ppid,nice,pri,pcpu,pmem,etime,user,wchan,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
Linux)
ps -A -ww -o pid,ppid,tid,nice,pri,pcpu,pmem,etime,user,wchan:20,stat,command | grep -i -e "^[[:space:]]*PID" -e ${pattern}
;;
*) # other UNIX flavors get a minimalist version.
ps -A -ww | grep -i -e ${pattern}
;;
esac
}
grep --colour
.+1 para resposta concisa @jamzed, no entanto, o OP pode precisar de alguma explicação:
Usando esse regex, você está iniciando um processo cuja sequência ps não corresponderá a si própria, uma vez que o regexp corresponde
"django"
e não"[d]jango"
. Dessa forma, você excluirá o processo que possui a string "[d] jango", que neste caso é grep; O mesmo pode ser aplicado ao pgrep, egrep, awk, sed, etc ... qualquer que seja o comando usado para definir o regex.Do homem 7 regex
fonte
ps aux | grep [s]cript1
. Você poderia ajudar a comentar sobre a solução?ps | grep [d]jango
ps | grep d[j]ango
...
ps | grep djang[o]
fonte
ps aux| grep "[Z] "
ps aux | grep [s]cript1
oups aux | grep [s]cript2
. A linha grep ainda é mostrada. Você poderia ajudar a comentar sobre a solução?Use pgrep:
pgrep -lf django
fonte
pgrep
me dá exatamente esse problema. Mas devo dizer que estou testando no CygWin (ondeps
não é possível mostrar a linha de comando completa do processo).pgrep
estava se combinando. Acontece que ele estava correspondendo ao nome dobash
arquivo de script do qual estava sendo executado. Adicionando-x
corrigido, então ele faz uma correspondência exata no nome do comando.Oh espera, isso funciona:
fonte
grep
, com a qual você não pode contar no caso geral.ps -d | grep django
do homem ps:
fonte
ps
são notoriamente não portáveis; portanto, sem informações sobre qual plataforma é, essa resposta não é muito útil. Além disso, isso obviamente não é adequado quando você não tem certeza de que o processo que você está procurando não é um líder de processo (ou seja, isso pode ajudar se seu destino for um daemon, mas geralmente não o contrário).