Quando você executa gnome-terminal -e "vi" & MAIN_PID=$! , não está capturando o PID de vi em MAIN_PID ; você está capturando o PID dessa instância de gnome-terminal . Se você quiser encontrar o PID de um processo de propriedade de gnome_terminal , você poderia fazer alguma mágica na saída de pstree :
pstree -p $MAIN_PID | grep -o 'vim([0-9]*) | grep -o '[0-9]*'
Para verificar se um processo ainda existe, você pode usar kill -0 , que não enviará nenhum sinal, e retornará com um código de saída 0, se o processo existir, ou 1, se não existir.