【问题标题】:nohup SBCL ubuntu couldn't read from standard inputnohup SBCL ubuntu 无法从标准输入读取
【发布时间】:2011-01-28 08:45:13
【问题描述】:

在 Ubuntu 上,我使用线程编译了 sbcl 1.0.35。我可以愉快地从命令行使用 sbcl,并且我的 hunchentoot 网站可以使用线程,但是当我注销时它就消失了。当我尝试 nohup sbcl

nohup ./src/runtime/sbcl --core output/sbcl.core

我明白了

(SB-IMPL::SIMPLE-STREAM-PERROR "无法从 ~S 读取" # 9)

我尝试了将标准输入重定向到 /dev/null 或文件并使用脚本命令行选项的各种组合,但我不太明白发生了什么。

如何使用 nohup 从 linux 上的命令行启动 sbcl 并保持我的 repl(website) 运行?

【问题讨论】:

    标签: linux lisp sbcl nohup


    【解决方案1】:

    Andrey Moskvitin 的 RESTAS 网络框架(“REST 应用程序服务器”)包含正确守护 SBCL 实例的代码。见http://github.com/archimag/restas/blob/master/contrib/restas-daemon.lisp。您可以轻松撕掉 RESTAS 特定的部分。

    【讨论】:

      【解决方案2】:

      您可以在 Gnu Screen 中启动 SBCL,然后从会话中分离。

      这也使您可以稍后重新附加到您的 REPL。

      【讨论】:

        【解决方案3】:

        Dmity-vk 让我走上了正轨,谢谢。 SBCL 在您启动时尝试启动 repl,并从标准输入中读取。当您使用nohup 时,标准输入被重定向并且无法读取。 SBCL 然后下降到调试器,该调试器尝试从标准中读取......因此是无限循环。 --script 标签几乎可以解决这个问题,只是在读取脚本后它有一个(quit)。所以我在我的脚本中放了一个无限循环,瞧。

        在带有 sbcl 的 ubuntu 服务器上,这应该可以让你启动一个 hunchentoot 服务器

        sudo nohup ./run-sbcl.sh --script foo.lisp > /dev/null 2> /dev/null &
        

        其中 foo.lisp 的最后几行类似于

        (defvar *alive* t)
        
        (loop (sleep 1000) (if (not *alive*) (quit)))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-30
          • 2012-02-17
          • 2015-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多