NodeJs 重启程序时,如何保证PID不变? 重启程序,每次都生成不同的pid,如何做到pm2那样restart后pid依旧保持不变?
特地去用 pm2 试了一下,发现并没有你说的这个功能。重启之后 pid
都会发生变化
最开始我也怀疑 stop
、start
、restart
这三个指令可能不会杀掉系统里的进程,但是实际上并不是这样。
我做了以下操作:
pid=20259
~/.pm2/pids
目录下对应的 .pid
发现已经被删除了20259
进程已经被回收了~/.pm2/pids
目录,发现 pid 文件已创建,pid=2036420364
进程创建。因此得出: pid 会改变,进程会被回收
思考补充:
pid
代表的是系统的进程,进程被回收则 pid
会被销毁。pid
不改变意味着进程一直占用系统资源,但是 stopped
状态的程序是不用保留系统进程的,需要销毁。
至于有没有机制可以对 restart
的进程进行 pid
保留,我不知道。
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
只要发生进程的结束和(重新)启动,pid就一定会重新分配(有可能正好是同一个,但一般不是)。pm2我没用过,但如果你观察到一个“进程”“重启”后pid不变,那你观察的那个进程可能并不是真正被重启的进程,而是控制进程,或者说master进程没有重启,worker进程重启了,而你看到的是master进程的pid;也有可能你看到的不是pid,而是管理程序分配的内部id。
如果真的要实现pid不变而重启进程,我能想到的是调用
exec
,具体怎么调用估计就要写native addon了;想实现对被管理的进程透明的话可能得注入之后想办法调用exec,例如通过插桩或信号处理函数。