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 .