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>/stat
diz o nome do comando? - o que é que
ps -e | grep db2
diz o nome do comando? - do
ps -e | grep db2
eps au | grep db2
mostram 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
.