ocaml-core equivalent of Unix.create_process



我想把下面的命令从Unix库移植到Jane Street的Core.Std.Unix库。

Unix.create_process exec args Unix.stdin Unix.stdout Unix.stderr

也就是说,我有一个可执行的exec和参数args,并希望使用与当前进程相同的输入/输出/错误通道运行该进程。

我可以接近Core.Std.Unix.create_process ~exec:exec ~args:args,但不知道如何将这个函数从核心返回的stdin,stdout,stderr与当前进程使用的文件描述符连接起来。

您可以将返回的描述符dup2为当前描述符,但我不确定这是否有效。

open Core.Std
let redirect ( p : Unix.Process_info.t ) : unit =
  let open Unix.Process_info in
  List.iter ~f:(fun (src,dst) -> Unix.dup2 ~src ~dst) [
    p.stdin,  Unix.stdin;
    p.stdout, Unix.stdout;
    p.stderr, Unix.stderr
  ]

let exec prog args : unit =
  let p = Unix.create_process ~prog ~args in
  redirect p

但是还有另一种可能适用的解决方案。考虑只使用Unix.system,它应该可以开箱即用。

我不确定我是否正确理解您的问题,但如果您只是想使用与当前进程相同的通道,请查看Core.Std.Unix中的fork_exec:

val fork_exec : prog:string ->
                args:string list ->
                ?use_path:bool -> 
                ?env:string list -> 
                unit -> Core_kernel.Std.Pid.t

根据文档,

fork_exec ~prog ~args ?use_path ?env()派生并执行带有args的prog,并将子pid返回给父进程。

相关内容

  • 没有找到相关文章

最新更新