2013-03-09 52 views
0

是否可以在某些系统调用中同步两个linux进程而不修改其代码?在某些系统调用中同步两个进程

一个真实世界的例子:v4l2-ctl是一个可以用来设置网络摄像头的某些控件的工具。运行它以设置一些控件后,ffmpeg用于使用相机捕捉电影。但是,仅设置一些控件并重置其他控件,ffmpeg将废弃v4l2-ctl所做的精心调整。

现在,如果不修改和重建这两个工具中的一个或两个,就可以解决此问题。如果ffmpeg可以启动,但是会在打开并配置/dev/video0(最有可能发生一些ioctls)和v4l2-ctl然后应用设置后暂停。之后,ffmpeg将会恢复,并开始使用适当的设置进行捕捉。

是否有可能通过简单的方式跟踪一个进程io操作并暂停它?

回答

1

如果你喜欢冒险的感觉,而且不介意使用调试编译ffmpeg,你可以想见,启动它gdb下,打开/dev/video0(后设置一个断点或其他地方的性能损失。你需要的以任何方式来源)。

然后,您可以运行二进制文件,直到它遇到断点,调整v4l2-ctl,然后告诉ffmpeg继续经过断点。

+0

这将有利于澄清暂停发生的位置。但是,我认为几个发布的“ioctls”能够提供足够的概览来完成清理工作。所以我想知道是否有任何方法可以拦截或停止合理的io操作,而不是分析庞大的代码。 – dronus 2013-03-09 23:50:09

+0

问题是,即使你可以观察到这样一个事件(比如用'strace'),那么你就无法及时地(通过发送一个'SIGSTOP')发出反应:'ffmpeg'会保持正确在事件之后运行,直到它例如处理信号。 – phs 2013-03-09 23:52:43

+0

'strace'看起来很酷。也许'strace'拦截呼叫的方式可以用来阻止呼叫本身?如果存在这样的工具,它可以执行系统调用,但保持控制,然后挂起进程,调用用户命令并恢复进程。该过程将卡住截取的'ioctl',而新的设置以这种方式应用。 – dronus 2013-03-10 00:10:46