Como matar corretamente um script .sh em segundo plano que continua chamando outra coisa sem “me matar” / matar todos os meus processos?

0

Estou logado em um servidor remoto (o servidor é o CentOS, estou no Ubuntu). Eu executei o seguinte comando:

nohup bash script.sh > log.txt &

script.sh contém, simplificado, este conteúdo:

for q (some condition that will trigger about 60 times)
do
sed (change config file for some other program depending on q)
execute some other program (each call of this other program takes about 25 minutes)
done

Infelizmente, percebi que houve um pequeno erro no outro programa. Eu consertei sem problemas, mas estou tendo problemas para realmente matar este script, então posso começar com o outro programa fixo. Quando eu fiz o nohup bash script.sh no começo, ele apareceu um número 1946, que eu assumo é o pid para script.sh. Eu fiz:

pkill 1946

Isso parou o OTHER PROGRAM que o script.sh chama (eu posso dizer do arquivo de log que ele cria). Mas então, script.sh chama a próxima iteração do outro programa. Eu posso dizer porque o arquivo de log que script.sh faz me diz, e também, o outro programa usa minhas GPUs, que eu posso monitorar com nvidia-smi. Eu não vejo script.sh em "top", mas vejo o programa que ele continua chamando. Eu pude contornar isso com o seguinte:

while true
do
sleep 1
pkill (the other program)

Após um minuto ou mais, ele mata todas as iterações que o script.sh faria. Mas esta não é uma maneira elegante de fazer isso.

Se eu estivesse fisicamente no local em que o servidor está (às vezes faço isso), faço o seguinte na mesma situação:

pkill -u (me)

Isso mata tudo o que estou fazendo. Acabei de logar e começar de novo, não é grande coisa. Isso acontece muito enquanto eu depuro o outro programa. Mas agora estou logado através de um comando como este executado no servidor:

ssh -r (server) (my home)

Então, se eu fizer isso, ele irá matar minha conexão com o servidor. Obviamente, não quero fazer isso.

Normalmente eu seria um pouco mais aventureiro e tentaria coisas antes de correr aqui para perguntar, mas estou jogando pelo seguro. Eu não quero matar minha conexão ssh. Como posso matar corretamente script.sh elegantemente? (Sim, eu tentei simplesmente fazer "pkill script.sh" ou "kill script.sh", não fez nada).

    
por iammax 05.07.2017 / 23:57

1 resposta

1

ps -edf | grep script.sh

Mate os processos. Concentre-se no processo primário que está gerando o resto primeiro. Em seguida, trabalhe de volta por todos os processos filhos.

E então mate -9 os processos #

Ou

killall script.sh

    
por washingon 06.07.2017 / 00:02