加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

带有Core_unix.exec的OCaml Core_unix.fork永远不会返回

发布时间:2020-12-15 21:02:03 所属栏目:安全 来源:网络整理
导读:由于子进程返回Core_kernel.Std.never_returns并且父进程正在尝试返回(),因此我遇到了以下方式执行fork操作的问题. 我得到错误此表达式具有类型单元但是表达式期望类型为Core_kernel.Std.never_returns = Core_kernel.Nothing0.t.似乎无法找到使用Core.Std执
由于子进程返回Core_kernel.Std.never_returns并且父进程正在尝试返回(),因此我遇到了以下方式执行fork操作的问题.

我得到错误此表达式具有类型单元但是表达式期望类型为Core_kernel.Std.never_returns = Core_kernel.Nothing0.t.似乎无法找到使用Core.Std执行此操作的方法.

open Core.Std
open Unix

let () = 
  let prog = "ls" in
  let args = ["ls"; "-l"] in
  match Unix.fork () with
  | `In_the_child ->
     Unix.exec ~prog:prog ~args:args ();
  | `In_the_parent _ ->
     (* continue on with the program *)

解决方法

never_returns类型专门设计为使用never_returns函数.这是要求程序员在代码中清楚地说明,他理解表达式不会终止.这是一个工作示例:

let () =
  let prog = "ls" in
  let args = ["ls"; "-l"] in
  match Unix.fork () with
  | `In_the_child ->
    Unix.exec ~prog ~args () |>
    never_returns
  | `In_the_parent _ -> ()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读