Ctrl + C не ждет завершения дочернего процесса (фоновый процесс) с trap - PullRequest
1 голос
/ 10 апреля 2019

У меня есть скрипт, который регистрирует ловушку 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, но я не знаю, почему

...