У меня есть скрипт, который регистрирует ловушку SIGINT и запускает фоновый процесс ffmpeg, который записывает часть экрана. Ловушка SIGINT отправляет сигнал SIGINT в фоновый процесс ffmpeg, чтобы заставить его корректно остановить и закончить запись.
Когда этот скрипт выполняется в терминале и завершается с отдельного терминала с помощью kill -INT [SCRIPT_PID]
, фоновый процесс ffmpeg завершается изящно и выдает подтверждение в терминале 1.
Когда скрипт запускается в терминале и останавливается с ctrl+c
, фоновый процесс просто мгновенно умирает. (даже если Ctrl + C должен просто отправить сигнал SIGINT)
Почему ctrl + c ведет себя не так, как в этом случае уничтожение скрипта с помощью kill -INT
?
Как я могу убедиться, что фоновый процесс ffmpeg завершается изящно при завершении скрипта ctrl + c?
#!/bin/bash
exit_script() {
kill -INT $ffmpeg_pid
wait $ffmpeg_pid
printf "\n\nffmpeg should say 'exiting normally, received signal 2' before this message is printed!\n\n"
}
trap exit_script SIGINT
ffmpeg -f x11grab -s 500x500 -i :0.0+0,0 ~/video_`date +%s`.webm &
ffmpeg_pid=$!
wait
edit: похоже, что ffmpeg получает 2 int-сигнала в случае ctrl+c
, но я не знаю, почему