O pgrep
do FreeBSD exclui os ancestrais do processo pgrep
, incluindo a instância de script que o executou. O pgrep
do Linux não tem um recurso correspondente.
Você pode excluir a instância de script manualmente. O ID do processo a excluir está em $$
. Você precisa ser um pouco cuidadoso para evitar também qualquer subshell: o método mais direto pgrep … | grep -v "^$$ "
pode listar o lado direito do canal se pgrep
chegar a ele na lista de processos antes de grep
ser chamado.
instances=$(pgrep -fl "test.sh")
if [[ "$instances" =~ (.*)$'\n'"$$ "[^$'\n']*$'\n'(.*) ]]; then
instances=${BASH_REMATCH[1]}$'\n'${BASH_REMATCH[2]}
elif [[ "$instances" =~ (^|.*$'\n')"$$ "[^$'\n']*($|$'\n'.*) ]]; then
instances=${BASH_REMATCH[1]}${BASH_REMATCH[2]}
fi