Mate um processo de forma limpa

1

Eu preciso fazer a plataforma Linux Ubuntu iniciar automaticamente e matar um processo, por exemplo, se o tempo é 8am processo começa, se o tempo é processo de 7pm é morto, e que tem que ser todos os dias, e deve ser bastante bem, se intervalo de tempo será fácil de mudar.

Estou tentando usar códigos simples no crontab:

28 12 * * * /home/pi/Desktop/start.sh
50 11 * * * pkill led.py

Não olhe, às vezes, tentei alterá-los, start.sh starts led.py script, mas não consigo pará-lo se estou usando pkill -9 -f led.py . O processo é morto, mas os LEDs não são desligados. Se eu iniciar manualmente o programa e, em seguida, eliminá-lo com Ctrl + c , os LEDs serão desligados. Onde está o problema? Por que não posso matar o processo e ao mesmo tempo desligar os LEDs?

    
por Vettehra 27.09.2016 / 11:33

1 resposta

2

Quando você digita Ctrl + c , isso normalmente envia ao processo um sinal "INT". De signal(7) :

  Signal     Value     Action   Comment
  ──────────────────────────────────────────────────────────────────────
  ...
  SIGINT        2       Term    Interrupt from keyboard

É comum que processos instalem um manipulador para este sinal, permitindo que eles executem alguma limpeza antes de sair. No caso do seu script led.py , parece que esse manipulador desligou os LEDs.

Por padrão, pkill e kill enviam o sinal "TERM" (15). (Você também tentou enviar "KILL" (9).) Esses sinais fizeram com que led.py morresse com menos graça, sem ter a chance de executar sua função de finalização.

Para permitir que led.py seja concluído corretamente, envie o sinal "INT" (2), com

pkill -2 [process specifier]

O comando pkill no seu crontab também pode não ter encontrado o processo, porque o nome que você deu não era o que estava procurando. De pkill(1) :

-f, --full

The pattern is normally only matched against the process name. When -f is set, the full command line is used.

Como seu script, led.py , era presumivelmente um script python, o nome do processo era simplesmente python (ou python3 ou similar). A linha de comando completa seria algo como python led.py , então as opções -f permitem que você combine isso.

pkill -2 -f led.py
    
por 27.09.2016 / 12:39

Tags