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