Script de shell executando binários em vários terminais

0

Sou bem novo em shell scripts, mas tenho alguns binários que gostaria de executar em um loop sobre um conjunto de diferentes arquivos de entrada. Eu preciso que eles sejam executados em sequência: repita após o atual completo.

Cheguei a tentar executar dois processos em terminais separados e salvar o pid, mas quando vou matar o processo, parece que os pids mudaram.

#!/bin/bash
gnome-terminal -e "vi" & MAIN_PID=$!
gnome-terminal -e "gedit" & SIM_PID=$!
echo "MAIN Process ID is " $MAIN_PID
echo "SIM Process ID is " $SIM_PID
sudo kill $MAIN_PID

Saída de terminal:

MAIN Process ID is  8532
SIM Process ID is  8542
# Option “-e” is deprecated and might be removed in a later version of gnome-terminal.
# Use “-- ” to terminate the options and put the command line to execute after it.
kill: (8532): No such process
user:~/Desktop$ ps -A | grep vi
 1026 ?        00:00:01 dconf-service
 8541 pts/3    00:00:00 vi
user:~/Desktop$ ps -A | grep gedit
 8550 pts/4    00:00:00 gedit

Se houver uma maneira mais fácil de começar o que quero, gostaria de saber também. Eu estava planejando iniciar esses processos e verificar algumas condições para saber quando eles foram concluídos, eliminar o processo e repetir com um conjunto diferente de entradas.

    
por woahs 23.08.2018 / 16:36

1 resposta

0

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.

    
por 23.08.2018 / 17:51