【问题标题】:Where do npm background scripts go?npm 后台脚本去哪了?
【发布时间】:2013-09-09 10:05:53
【问题描述】:

我有一个程序依赖于另一个正在运行的程序,所以我将此build 命令添加到我的package.json 文件中

"scripts": {
    "start": "brunch watch --server",
    "build": "coffee server/modules/events/book_server.coffee &"
  }

所以在我使用npm start 运行我的主脚本之前,我运行npm run-script build 这使我的主脚本工作,但是当我退出我的主脚本然后使用bg 查找后台进程时,我收到了消息

> -bash: bg: current: no such job

所以我决定再次运行npm run-script build,但是之前的进程肯定还在运行,因为我收到了错误消息

events.js:66
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: listen EADDRINUSE
  at errnoException (net.js:776:11)
  at Server._listen2._connectionKey (net.js:917:26)
  at process.startup.processNextTick.process._tickCallback (node.js:244:9)

当我再次尝试运行我的主程序时,我得到了错误

> TypeError: Cannot read property 'port' of null

我的问题是,这些背景脚本在哪里?

到目前为止,我已经查看了所有明显的地方,包括 package.json 的目录,book_server.coffeenode_modules 的目录,但没有运气。

【问题讨论】:

    标签: javascript node.js npm


    【解决方案1】:

    所以后台进程进入后台只是在操作系统内部运行,但不附加到你的 shell 的 tty。要找到它们,请使用jobs -lps 命令以及ps -ef 之类的命令。您可以使用grep 过滤输出,但您需要找到构建过程的进程ID (PID),以便您可以使用kill <pid> 停止它。您可能还想阅读pgreppkill,这对这个过程很方便。

    请注意,在您的示例中,您在不合适时使用bgbg 用于此序列:1. 在 shell 的前台启动一个作业,2. 使用 CTRL-Z 暂停该作业,3. 使用 bg 告诉 shell“允许此作业继续执行,但与我的tty 在后台”。 (同样,jobs 是您在此处寻找的内容)。

    从更大的角度来看,在后台运行 coffee 命令没有必要也没有好处,因为它只是一个简单的编译步骤,大约需要几毫秒。

    如需了解“每年重读”的详细程度,请查看The TTY demystified

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多