Você percebeu que você tem dois PIDs diferentes nas duas tentativas?
Considere isto: se você digitar um comando como vi raven.txt, então ps axirá exibir uma linha que mostra um comando de vi raven.txt. Da mesma forma, se você digitar um comando como grep snappr, então, ps axserá exibida uma linha que mostra um comando de grep snappr. E, se você canalizar a saída desse psmeio grep snappr, a grepencontrará a linha que está descrevendo a si mesmo . Então, se você digitar
$ ps ax | grep snappr | awk '{print $1}'
repetidamente, ele imprimirá um número diferente a cada vez (porque está imprimindo o PID de grep, e você obtém um grepprocesso novo e exclusivo toda vez que executa o comando).
Finalmente, considere: o killcomando não pode ser executado até que seus argumentos sejam conhecidos. Para que seu argumento seja conhecido, o $(ps ax | grep snappr | awk '{print $1}')pipeline deve ter sido concluído. Isto implica que o grepdeve ter terminado 1 . Portanto, killestá sendo dado o PID do grepprocesso, mas somente após o grepprocesso ter terminado - então, naturalmente, ele reporta "Nenhum tal processo".
Talvez eu devesse ter mencionado que não há snapprprocesso em execução. Se houvesse, seu primeiro comando produziria dois números: o PID de snappre o PID de grep snappr. Agora, se snapprestava rodando, seu comando pode começar a rodar semi-corretamente, o que significa que ele faz o que você quer, mas também dá uma mensagem de erro. Se o snapprestá rodando com o PID 42097, e grep snapprroda com o PID 70848, então o killcomando será kill 42097 70858, o que irá matar o snappr
e obter uma mensagem de erro de tentar matar o grepprocesso que não existe mais.
Você provavelmente vai querer melhorar isso. Meu jeito favorito, que eu inventei há 20 anos, é mudar o greppara grep "[s]nappr", o qual vai combinar snapprmas não vai se igualar. Outra abordagem é usar em pgrepvez de ps | grep.
1 Alternativamente, o awkpoderia terminar se o grepmeramente fechou sua stdout. Este seria um comportamento muito incomum para um programa * nix.
snapprestivesse rodando, o primeiro comando teria listado dois PIDs: o dosnappre o dogrep- como explicado na minha resposta, que eu postei meia hora antes de você postar este comentário. ... ... ... ... ... PS Você pode querer revisar suas contribuições um pouco melhor ("Eu afirmo o erro", "ad", "mit").