我正在使用一个端口来运行一个管道,其中包含解压缩和dd的一些数据:
Port = open_port({spawn, "bzcat | sudo dd of=/dev/foo},
[stream, use_stdio, exit_status]),
我想做的是在输出上产生一个文件结束的情况,导致管道完成并最终退出。
我想等待这个完成并捕获exit_status
。
当我只是调用port_close
时,在我看来,管道就像刚刚终止,没有等待完成。我也没有得到任何exit_status
...
我如何在下一步之前完成等待退出(这需要dd已经完成)。
做了一些实验,看起来至少port_close
不会杀死进程,你只是不知道它什么时候完成。是这样吗?
2条答案
按热度按时间5m1hhzi41#
如果你只需要等待
open_port
命令生成完成,你需要等待exit_status
消息:**更新(即将说一个端口只是关闭输出管道):**我认为你不能只是关闭输出管道与默认的spawn驱动程序。默认驱动程序没有任何控制命令,
port_close
虽然没有杀死衍生命令,但完全清除所有端口的状态。可能的解决方案:
bzip/dd
序列;uidvcgyl2#
可以在这里找到一些相当丑陋的解决方法:limitations of erlang:open_port() and os:cmd()
有些人甚至使用netcat将问题Map到tcp连接。