Do seu comentário, você deve estar fazendo pgrep donothing.py
ou pgrep -x donothing.py
.
Ao usar pgrep -f
, ele procura por qualquer comando que tenha a sequência correspondente em seu nome e / ou argumentos. Não há uma maneira bonita de filtrar os resultados. A solução é corresponder exatamente ao que você procura, portanto, corresponda ao nome do processo. Por padrão, pgrep
corresponde apenas ao nome do processo. Por padrão, ele procurará por qualquer processo cujo nome contenha a string de correspondência. Com -x
, ele procurará por qualquer processo cujo nome corresponda exatamente à string.
pgrep
também é inteligente o suficiente para entender os scripts. Se você tiver um script chamado foo.sh
, ele será exibido em ps
as /bin/sh foo.sh
(ou algo semelhante). Neste caso, pgrep
irá comparar o nome do script. Então você pode fazer pgrep foo.sh
ou pgrep -x foo.sh
.
Portanto, no seu caso, você deve estar fazendo pgrep -x donothing.py
para obter uma correspondência exata.
EDIT:
Devo observar que isso só funciona se o script foi iniciado como /path/to/donothing.py
. Se você iniciar como python donothing.py
, não funcionará.
Nesse caso, você precisa usar um regex como pgrep -f '^python donothing.py'
.
EDIT2:
O problema que você está encontrando com watch
está citando. executando watch pgrep -f '^python donothing.py'
runs pgrep
sem argumentos. O -f '^python donothing.py'
é passado como um argumento para watch
, não pgrep
como pretendido. Todo o comando pgrep deve ser citado.
watch "pgrep -f '^python donothing.py'"
Como outra nota. Se você vai usar isso para outras coisas, pode ser mais seguro fazer
watch "pgrep -f '(^|\S+/)python donothing.py'"
Isto irá capturar o caso em que o processo aparece como algo como /usr/bin/python
em vez de apenas python
.