Isso é no Linux?
Na verdade, existem algumas versões sutilmente diferentes do nome do comando que são usadas por ps , killall , etc.
As duas principais variantes são: 1) o nome do comando longo, que é o que você obtém quando executa ps u ; e 2) o nome curto do comando, que é o que você obtém quando executa ps sem nenhum sinalizador.
Provavelmente, a maior diferença acontece se o seu programa for um script de shell ou qualquer coisa que exija um intérprete, por exemplo, Python, Java, etc.
Aqui está um script realmente trivial que demonstra a diferença. Eu chamei de mycat :
#!/bin/sh
cat
Depois de executá-lo, veja os dois tipos diferentes de ps .
Em primeiro lugar, sem u :
$ ps -p 5290
PID TTY ... CMD
5290 pts/6 ... mycat
Em segundo lugar, com u :
$ ps u 5290
USER PID ... COMMAND
mikel 5290 ... /bin/sh /home/mikel/bin/mycat
Observe como a segunda versão começa com /bin/sh ?
Agora, até onde eu sei, killall realmente lê /proc/<pid>/stat , e pega a segunda palavra entre os parentes como o nome do comando, então é exatamente isso que você precisa especificar quando você executa killall . Logicamente, isso deve ser o mesmo que ps sem a declaração u , mas seria uma boa ideia verificar.
Coisas a verificar:
- o que é que
cat /proc/<pid>/statdiz o nome do comando? - o que é que
ps -e | grep db2diz o nome do comando? - do
ps -e | grep db2eps au | grep db2mostram o mesmo nome de comando?
Notas
Se você estiver usando outros sinalizadores de ps também, talvez seja mais simples usar ps -o comm para ver o nome abreviado e ps -o cmd para ver o nome longo.
Você também pode achar pkill uma alternativa melhor. Em particular, pkill -f tenta corresponder usando o nome completo do comando, ou seja, o nome do comando conforme impresso por ps u ou ps -o cmd .