0
是否可以在某些系统调用中同步两个linux进程而不修改其代码?在某些系统调用中同步两个进程
一个真实世界的例子:v4l2-ctl
是一个可以用来设置网络摄像头的某些控件的工具。运行它以设置一些控件后,ffmpeg
用于使用相机捕捉电影。但是,仅设置一些控件并重置其他控件,ffmpeg
将废弃v4l2-ctl
所做的精心调整。
现在,如果不修改和重建这两个工具中的一个或两个,就可以解决此问题。如果ffmpeg
可以启动,但是会在打开并配置/dev/video0
(最有可能发生一些ioctls
)和v4l2-ctl
然后应用设置后暂停。之后,ffmpeg
将会恢复,并开始使用适当的设置进行捕捉。
是否有可能通过简单的方式跟踪一个进程io操作并暂停它?
这将有利于澄清暂停发生的位置。但是,我认为几个发布的“ioctls”能够提供足够的概览来完成清理工作。所以我想知道是否有任何方法可以拦截或停止合理的io操作,而不是分析庞大的代码。 – dronus 2013-03-09 23:50:09
问题是,即使你可以观察到这样一个事件(比如用'strace'),那么你就无法及时地(通过发送一个'SIGSTOP')发出反应:'ffmpeg'会保持正确在事件之后运行,直到它例如处理信号。 – phs 2013-03-09 23:52:43
'strace'看起来很酷。也许'strace'拦截呼叫的方式可以用来阻止呼叫本身?如果存在这样的工具,它可以执行系统调用,但保持控制,然后挂起进程,调用用户命令并恢复进程。该过程将卡住截取的'ioctl',而新的设置以这种方式应用。 – dronus 2013-03-10 00:10:46