2014-07-12 45 views

回答

2

external-program,提供了一個便攜的方式來運行... Common Lisp中的外部程序。它爲我完成這個工作,抽象出編譯器提供的各種接口的瑣碎往往是一個不錯的選擇,關於時間execve將會帶來「性能」損失,如果這裏有任何真正不相關的話。

如果你真的只是針對SBCL你有sb-ext:run-program這真是一個複雜的execve。根據我的經驗,它仍然通過/ bin/sh運行程序,無論如何可能會進行PATH查找,因此它可能不會完全成爲execve。

+0

sb-ext:運行程序不會經過/ bin/sh。 [源代碼](http://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/run-program.lisp#l640)明確表示「RUN-PROGRAM使用fork()和execve ()來運行一個不同的程序。「但是,鏈接到的手冊頁確實提到了「運行程序的sbcl實現,如Perl和許多其他程序,但與原始cmu cl實現不同,默認情況下會複製Unix環境。」有時候可能會給人一種跑過/ bin/sh的印象,因爲有些環境因素會在那裏。 –

+1

我的壞處是使用/ bin/env的外部程序。 [來源](https://github.com/sellout/external-program/blob/master/src/sbcl.lisp#L22) – thodg