bash: deixe um processo ser executado em segundo plano, reinicie se necessário, mas receba CTRL-C do script pai

0

Estou usando livestreamer e ffmpeg para capturar imagens de uma transmissão ao vivo a 0,1 fps:

livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=1/10 out%04d.png" https://www.ustream.tv/channel/number worst

Não consegui que o ffmpeg sobrescrevesse sua saída, por isso continua criando novos arquivos com o padrão out%04d.png . Isso é bom, eu posso acompanhar o mais novo arquivo e excluir os antigos. No entanto, o processo livestreamer às vezes sai por vários motivos e eu gostaria de reiniciá-lo automaticamente, desde que eu queira executá-lo.

Uma tentativa usando um subshell não reagiu ao CTRL-C como eu esperava, porque o sinal não é passado no subshell:

#!/bin/bash

( while true; do
  livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=0.1 out%04d.png" https://www.ustream.tv/channel/number worst
done ) &

while true; do
  newestImage=${code to find newest image}
  postProcess $newestImage
  deleteOldImages
  sleep 5
done

Quando eu envio SIGINT para o script acima, o subshell permanece ativo mesmo quando eu fecho o shell no qual iniciei o script pai. O diretório de saída é inundado com novos arquivos enquanto o código que deve excluí-los não está mais sendo executado. Um trap não ajudou:

trap "kill $SUBSHELL_PID" SIGINT

( ... ) & # subshell as above
SUBSHELL_PID=&!

Com isso, nem consegui interromper o script pai. Obviamente, eu não tenho experiência com manipulação de sinais no bash, então estou feliz com qualquer conselho que me faça avançar. Preciso reiniciar o frame-grabber enquanto o script pai estiver em execução e controlar os arquivos antigos para excluí-los.

Edit: A subshell pode ser uma má ideia em primeiro lugar? Posso de alguma forma lançar livestreamer em segundo plano e matá-lo quando quiser ou reiniciá-lo quando sair sozinho?

    
por Christoph 13.09.2016 / 09:25

1 resposta

1

Mate o próprio livestreamer.

trap "killall livestreamer" SIGINT
    
por 13.09.2016 / 09:31