【问题标题】:How to execve() in common lisp (SBCL)?如何在 common lisp (SBCL) 中执行 execve()?
【发布时间】:2014-07-12 00:21:57
【问题描述】:

从 SBCL lisp 实现中的 lisp 代码 execve() 的最佳方式是什么?或者也许有一种处理所有实现的好方法?

【问题讨论】:

    标签: lisp common-lisp sbcl execve


    【解决方案1】:

    external-program 提供了一种可移植的方式来很好地运行……Common Lisp 中的外部程序。它为我完成了这项工作,抽象出编译器提供的各种接口的琐碎通常是一个不错的选择,并且关于时间execve 将承担“性能”损失,如果这里真的不相关的话。

    如果你真的只针对 SBCL,你有 sb-ext:run-program 这确实是一个复杂的 execve。根据我的经验,它仍然通过 /bin/sh 运行程序,并且可能会进行 PATH 查找,因此它最终可能不会完全是一个 execve。

    【讨论】:

    • sb-ext:run-program 不通过 /bin/sh。 The source 明确表示“RUN-PROGRAM 使用 fork() 和 execve() 来运行不同的程序。”但是,您链接到的手册页确实提到“run-program 的 sbcl 实现,与 Perl 和许多其他程序一样,但与原始 cmu cl 实现不同,默认情况下复制 Unix 环境。”有时这可能会给人一种通过 /bin/sh 运行的印象,因为一些环境的东西会在那里。
    • 我的错是使用 /bin/env 的外部程序。 Source
    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2015-09-30
    • 2021-11-15
    • 2017-05-19
    相关资源
    最近更新 更多