ctrl + c不会等待子进程(后台进程)完成陷阱操作

时间:2019-04-10 19:56:24

标签: bash ffmpeg sigint bash-trap trap

我有一个脚本,该脚本注册SIGINT陷阱并启动ffmpeg后台进程,该进程记录屏幕的一部分。 SIGINT陷阱将SIGINT信号发送到后台ffmpeg进程,以使其正常停止并完成记录。

当此脚本在终端中运行并以kill -INT [SCRIPT_PID]从另一个终端终止时,ffmpeg后台进程将正常终止并在终端1中输出确认。

当脚本在终端中运行并以ctrl+c停止时,后台进程立即终止。 (即使ctrl + c应该只是发送SIGINT信号)

在这种情况下,为什么ctrl + c的行为与用kill -INT终止脚本的行为不同? 用ctrl + c结束脚本时,如何确保ffmpeg后台进程正常结束?

#!/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

编辑:在ctrl+c的情况下,ffmpeg似乎接收到2个int信号,但我不知道为什么

0 个答案:

没有答案