Como recarregar um processo em segundo plano?

3

Eu tenho um script python que gostaria de executar em segundo plano. Então eu faço isso:

$ nohup python script.py &

Se eu estou frequentemente fazendo alterações no script, preciso finalizar o processo e executar o script novamente.

$ kill -9 <pid_of_bg_process>
$ nohup python script.py &

É possível recarregar o processo sem terminá-lo?

    
por Animesh 26.04.2012 / 20:56

2 respostas

5

Resposta curta - não.

Resposta longa: você está realmente chamando um interpretador python. Esse interpretador carrega o script.py e o analisa.

Se você alterar o script, ele precisará recarregar o arquivo e começar do início, pois o interpretador não tem como saber qual parte foi alterada.

Agora, se seu objetivo é simplesmente sinalizar python para recarregar / reiniciar o script, você pode envolvê-lo em um script de shell:

#!/bin/sh
LINE="python script.py"
stop()
{
  pkill -f "$LINE"
}
clean()
{
  stop
  exit 0
}
trap stop 1
trap clean 9 15
while true
  do
    $LINE &
    wait
done

Agora você pode iniciar o shell-script (em background, com nohup, se quiser). Se você enviar um sinal HUP para ele, ele reiniciará seu processo python.

Se você matar o processo do wrapper, o script python também terminará.

Eu não testei meu roteiro - mas a ideia deve ficar clara.

    
por 26.04.2012 / 22:15
2

você pode usar kill -USR1 PID ou pidof script.py também -9 é brutal para terminar o processo, tente -15 para uma saída elegante.

    
por 26.04.2012 / 22:28