问题描述
最近,我使用node.js + express制作了一个简单的API服务器。下面的脚本是我用于与npm命令一起运行的package.json文件的一部分。
"scripts": {
...
"release": "cross-env NODE_ENV=production MODE=release node server/app.js",}
使用 npm run release 启动服务器后,我可以看到Linux服务器上正在运行以下多个进程。
/bin/sh /api/node_modules/.bin/cross-env NODE_ENV=development MODE=test node server/app.js
node /api/node_modules/.bin/../cross-env/bin/cross-env.js NODE_ENV=development MODE=test node server/app.js
node server/app.js
- 创建流程的顺序是什么? npm => / bin / sh =>节点/ api / .. =>节点服务器/app.js吗?
- 每个过程做什么?这三个过程都是运行我的服务器所必需的吗?
- 如果我想使用pid杀死服务器,应该使用哪个进程ID?
解决方法
创建过程的顺序是什么? npm => / bin / sh =>节点/ api / .. =>节点服务器/app.js吗?
每个过程做什么?这三个过程都是运行我的服务器所必需的吗?
嗯,流程是这样的:
- NPM在外壳内生成(运行),npm本身与NPX一起运行,以便运行set the local path。
- 您的npm脚本从名为
cross-env
的程序包中生成一个进程,用于跨OS环境变量设置。 - 该过程又会生成Node.js(在设置环境变量之后)
这就是为什么您看到3个进程的原因。服务器本身运行后-仅需要实际的服务器进程即可运行服务器。
如果我想使用pid杀死服务器,应该使用哪个进程ID?
这个:node server/app.js
-因为那是您的实际服务器,其他只是“实用程序进程”(一个用于运行的npm脚本,另一个用于环境变量”)。
值得一提的是,服务器通常在容器或其他协调器/管理器中运行,这些容器或管理器/管理器具有用于重新启动/终止进程的内置逻辑。通常,协调器将SIGTERM发送到流程。