Unix系统下NodeJS进程如何动态重写自身进程名称
Unix环境下Node.js修改自身进程名的实现方式
Node.js原生没有开放process.argv0的写入能力,直接修改该属性无效是正常现象——这个值只是进程启动时argv[0]的JS层只读缓存,修改不会同步到操作系统的进程表中。在Unix系统下可以通过以下两种方案实现进程名动态修改,效果和Ruby中重写$0完全一致:
方案1:使用原生
process.title属性(零依赖)
Node.js在Unix平台原生支持通过给process.title赋值修改进程名,修改后的名称会直接同步到ps、top等系统进程工具的展示结果中,无需额外依赖:// 设置新的进程名 process.title = 'my-custom-node-service' // 读取当前进程名验证 console.log(process.title) // 输出 my-custom-node-service注意:该方案存在长度限制,可设置的进程名最大长度不能超过进程启动时argv参数预留的连续内存空间长度,超出部分会被自动截断。如果需要设置更长的进程名,建议使用下面的原生扩展方案。
方案2:使用
setproctitle原生扩展(无长度限制,全Unix兼容)
第三方原生包setproctitle直接封装了Unix系统的setproctitle系统调用,会自动调整进程内存空间,支持设置任意长度的进程名,兼容Linux、macOS、BSD等几乎所有Unix类系统:
先安装依赖:npm install setproctitle调用代码如下:
const setproctitle = require('setproctitle') // 支持设置长进程名,不会被截断 setproctitle('my-node-service worker-1 port=5432 env=production')
不要尝试直接修改
process.argv数组元素实现需求,这类修改仅在JS层生效,不会同步到操作系统进程表,外部进程工具无法感知到变化。
内容的提问来源于stack exchange,提问作者marshally
相关产品推荐
相关产品推荐

