2011-12-10 102 views
1

应用程序将其状态存储在服务器/temp/status.txt上的文件中。有4种状态可能:wait,ready,recording, finished。有了一个cronjob我想启动一个shell脚本来检查这个文件,如下采取行动:bash脚本启动/停止ffmpeg x11grab

  • 等待 - >无能为力
  • 就绪 - >执行ffmpeg -f x11grab -s cif -r 25 -i :0.0 /tmp/out.mpg。现在虽然ffmpeg捕获,status.txt文件仍然需要检查的改变状态,
  • 记录 - >无能为力
  • 成品 - >发送q命令ffmpeg进程退出拍摄过程和结束脚本。

我试图用expectxdotool来解决它,意识到这绝对是错误的方式。我的问题是,我在bash和处理进程,子进程等方面没有任何经验。

+1

那你试试?更新帖子并告诉我们您遇到问题的位置。 – jman

+0

根据他对以下答案的评论,他想发送适当的'q'命令给ffmpeg。我来到这里是因为这是我想要做的。没有人回答如何做到这一点,如果它甚至可能,或者如果ffmpeg有另一种退出bash脚本的方法,比如ffmpeg -q或者其他的东西(但我只是检查了一下,而-q做了一些复杂的事情,而不是用于退出) 。 –

回答

0

我不太明白你的问题是你不知道如何开始写脚本或者如果你只是有一个单一的点你的问题 你能澄清你的问题吗?

我打算假设你的问题是你不知道如何在运行时停止ffmpeg,通常用于停止进程的肮脏方法是pkill,如pkill ffmpeg,这应该适用于大多数目的。

+0

很明显,我是bash脚本中的新手。我已经阅读了很多关于管道,流程,后台进程和子进程的内容,但我仍然很不确定。我知道如何编写一个脚本,我知道使用ffmpeg命令我会启动一个子进程,并且我知道如何编写while语句来检查状态文件。我不知道的是如何控制ffmpeg子进程,我想发送正确的q命令来退出它,或者只是正确解决ffmpeg问题?如果有2个ffmpeg进程在运行? – lunacafu

+0

是的,lunacafu,我现在和你3年前在同一个位置。我也希望能够将正确的'q'命令发送到与bash脚本启动相同的ffmpeg进程,并且我希望能够在退出其中一个进程时运行2个或更多ffmpeg进程。你找到解决方案吗?任何人都可以回答这个问题吗? –

-1

得到的ProcessID和使用,

C#

 Process p=Process.GetProcessByID(int); 
    p.Close(); 
    p.Dispose(); 
+0

有没有办法不需要C#的呢? –