应用程序将其状态存储在服务器/temp/status.txt
上的文件中。可能有4种状态:wait
,ready
,recording
,finished
。使用cronjob,我想启动一个shell脚本来检查这个文件并按如下方式采取行动:
ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg
。现在,当ffmpeg
捕获时,仍然必须检查status.txt文件以更改状态,q
命令发送到ffmpeg
进程以退出捕获进程并完成脚本。我试图用expect
和xdotool
解决这个问题,以便意识到这绝对是错误的方式。我的问题是我在bash
和处理流程,子流程等方面没有经验。
答案 0 :(得分:0)
我不太明白,如果您的问题是您根本不知道如何开始编写脚本,或者您只是遇到一个问题 你能澄清一下你的问题吗?
我将假设您的问题是您不知道如何在运行时停止ffmpeg,停止进程的常用脏方法是pkill
,如pkill ffmpeg
,这应该适用于大多数目的。
答案 1 :(得分:0)
要将q
发送到正在运行的ffmpeg进程,您可以在独立的screen
会话中运行ffmpeg,然后将字符串发送到该会话。
#create a session
screen -d -m -S mysession
#prepare an ffmpeg command
cmd="ffmpeg -i input.avi output.mp4; exit"
#send the command to the session
screen -S mysession -p 0 -X stuff "$cmd^M"
#send the q string
screen -S mysession -p 0 -X stuff "q"
从https://serverfault.com/a/547144
获得了这个提示我确定您不再需要此功能。我只是偶然发现了同一个问题,想分享一下。
注意:要在^M
之后插入$cmd
,必须先按ctrl+v
,然后按enter
。 ffmpeg命令完成后,exit
会关闭会话。
答案 2 :(得分:-1)
获取ProcessID并使用,
C#
Process p=Process.GetProcessByID(int);
p.Close();
p.Dispose();