Eu fiz isso há muito tempo em um dos meus scripts de shell. Aqui está como eu fiz:
ps aux | \
grep -P ${BASH_SOURCE[0]} | \
grep -v $$ | \
grep -P "bash" | \
grep -oP "^[[:alnum:]]+\s+\d+\s" | \
grep -oP "\d+" | \
xargs kill -9
A beleza desse método é que ele NÃO matará o script em execução atual, apenas as instâncias anteriores dele.
Um exemplo de script para demonstrar o método acima é este:
#!/bin/bash
ps aux | grep -P ${BASH_SOURCE[0]} | grep -v $$ | grep -P "bash" | grep -oP "^[[:alnum:]]+\s+\d+\s" | grep -oP "\d+"
sleep 100
Agora, execute uma instância desse script no seu terminal. Em seguida, execute outra instância em um terminal diferente. Você verá que a instância anterior será imediatamente eliminada enquanto a segunda é executada corretamente.