node.js - 使用 package.json 停止脚本终止 Node 进程

标签 node.js grep kill ps package.json

我正在尝试为我的nodeJS应用程序编写一个停止命令,该命令会greps Node 进程并杀死它,到目前为止我已经:

{
  ...
  "scripts": {
    "start": "node src/main/webapp/index.js",
    "stop": "kill \"$(ps ux | grep node | grep -Eo '^\\s+[0-9]+' | tr -d '[[:space:]]')\""
  }
  ...
}

如果我运行 ps ux 我会得到

  PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
12228    8428   12228      12960  cons0     197608 22:02:12 /usr/bin/ps
 4840       1    4840       4840  cons0     197608 22:01:46 /usr/bin/bash
13484   12292   12292       8024  cons0     197608 22:02:07 /c/Program Files/nodejs/node

如果我运行 echo "$(ps ux | grep node | grep -Eo '^\s+[0-9]+' | tr -d '[[:space:]]')" 然后我得到输出 13484 所以我知道这个位有效。但是,当我运行 npm stop 时,出现错误:

npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "stop"
npm ERR! node v0.12.4
npm ERR! npm  v2.10.1
npm ERR! code ELIFECYCLE
npm ERR! app@1.0.0 stop: `kill "$(ps ux | grep node | grep -Eo '^\s+[0-9]+' | tr -d '[[:space:]]')"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the app@1.0.0 stop script 'kill "$(ps ux | grep node | grep -Eo '^\s+[0-9]+' | tr -d '[[:space:]]')"'.
npm ERR! This is most likely a problem with the app package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     kill "$(ps ux | grep node | grep -Eo '^\s+[0-9]+' | tr -d '[[:space:]]')"
npm ERR! You can get their info via:
npm ERR!     npm owner ls app
npm ERR! There is likely additional logging output above.

为什么会出现这种情况?有没有更简单的方法来做到这一点?

最佳答案

这似乎有效:

"scripts": {
  "start": "node src/main/webapp/index.js & echo $! > .pid",
  "stop": "kill $(cat .pid)"
}

也许这对于您想要实现的目标来说已经足够好了,但我想还有更好的方法。

关于node.js - 使用 package.json 停止脚本终止 Node 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35542747/

相关文章:

node.js - 在 django 服务的 React ES6 应用程序中找不到 index.js

node.js - Socket.IO 版本输出

node.js - 加载后如何在 mongoose 子文档中使用 Schema 方法

bash - 使用 awk 获取数组中参数的值

SQL:中断查询

javascript - 在 javascript (node js) 中解释 16 位二进制补码

python - 如何使用 grep 但没有 for 循环在 shell 脚本中执行以下任务?

bash - 你如何结合 2 awk 输出

ruby - 当调用者进程被杀死时,IO.popen 命令被杀死

android - 升级 adb 工具后无法使用 adb 命令从命令行退出模拟器