Algumas maneiras:
Mate qualquer instância do script:
pkill -f start.sh
Isso eliminará qualquer processo com start.sh
em sua linha de comando, usando pkill
.
Mate uma instância específica do script:
Modifique o script para salvar seu PID em algum lugar:
#! /bin/bash
echo $$ >> /tmp/start_sh.pid
end=...
E diga stop.sh
para matar o processo com o PID:
#! /bin/bash
kill $(cat /tmp/start_sh.pid) || echo "Process is not running."
Isso eliminará todos os script.sh
processos.
Comunique-se com start.sh
Diga start.sh
para ler algum arquivo dizendo para sair:
#! /bin/bash
...
while [ $SECONDS -lt $end ]
do
[[ $(cat ~/kill_start.txt) == "KILL" ]] && exit 1
...
E diga stop.sh
para escrever "KILL" para esse arquivo:
#! /bin/bash
echo "KILL" > ~/kill_start.sh
Isso eliminará todas as instâncias de start.sh
, quando a próxima iteração de cada script for executada.
(Apesar do nome kill_start.sh
não é um script.)
Use pipes nomeados para se comunicar
Como alternativa, você pode executar um trabalho em segundo plano no script para observar alterações em ~/kill_start.sh
:
#! /bin/bash
...
[[ -p ~/kill_script.sh ]] && mkfifo ~/kill_script.sh
(read -N 0 < ~/kill_script && [[ $REPLY == "KILL" ]] && kill 0) &
while [ $SECONDS -lt $end ]
do
...
Em stop.sh
, ecoe qualquer coisa para ~/kill_script
:
#! /bin/bash
echo anything at all
Isso usará mkfifo
para criar um pipe nomeado . Em seguida, read
tentará ler a partir desse canal e esperará até receber qualquer entrada. Em seguida, vá para exit . Isso deve entrar em vigor quase imediatamente.
Use screen
Com screen
, você pode iniciar um shell via SSH, fechar sua conexão e depois retomar mais tarde. Então você pode iniciar uma sessão de screen
para o script, fechar sua conexão, ir de férias, voltar, lembrar sua conexão de tela e matar o script usando Ctrl C .