Eu tive que enfrentar esse mesmo problema há algumas semanas. pgrep
e pkill
suportam expressões regulares estendidas, por isso é uma simples questão de obter o regexp correto.
Este é o seu script com o regexp que usei.
#!/bin/bash
ProcessName=$1
pID= pgrep -fl "^(/.*)?${ProcessName}\s"
echo $pID
Embora o uso de pkill
(como Caleb sugeriu) seja melhor.
pkill -fl "^(/.*)?${ProcessName}\s"
Você ainda pode precisar ajustar o regexp para obter os resultados desejados para o seu caso de uso e como o programa está sendo executado.
Agora, se houver vários processos em execução com esse nome, eles serão, obviamente, eliminados. Se você quiser evitar que você pode usar -o
para matar apenas o mais antigo processo de correspondência ou -n
para matar apenas o mais recente . Se você quiser apenas um, mas não o mais antigo ou o mais novo, provavelmente não deveria estar usando p(kill|grep)
.