如何通过lua的io.popen打开的子进程避免C线程阻塞?

问题描述

我有一个C pthread运行一个非阻塞事件循环,该循环执行lua脚本。 lua脚本运行io.popen来执行需要花费一些时间才能完成的shell脚本。 我只想从脚本的输出中捕获前几个字符,即使脚本需要花费一些时间才能完成。当lua脚本读取前几个字符并到达末尾时,它会按预期将执行返回给C。问题在于,使用io.popen打开的shell脚本会一直在后台运行,直到完成。读取前几个字符后在lua中调用f.close()似乎不会停止其执行(它似乎仅关闭管道的读取端?)。不幸的是,它开始阻塞我的C线程,并显示“写入错误:管道破裂”消息,直到shell脚本结束。如果在lua脚本结束执行时关闭了管道的读取端(并收集了垃圾),这将很有意义,而shell脚本仍将写入端写入。问题是,由于我不再对其余的输出/执行感兴趣,我该如何终止该shell脚本,或者以一种不会阻塞父进程的方式使其静音?

我曾尝试在io.popen命令上重定向2> / dev / null,但是仅使“写入错误:管道破裂”消息静音-阻塞仍然存在。 如果有办法用io.popen来获取lua打开的子进程(从C)并杀死它? (我认为这可能也有帮助)。

任何想法/建议都将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)