为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJs 重启程序时,如何保证PID不变?大佬们有什么好的建议?

NodeJs 重启程序时,如何保证PID不变?大佬们有什么好的建议?

aluckdog 2019-10-16 10:47:16
NodeJs重启程序时,如何保证PID不变?重启程序,每次都生成不同的pid,如何做到pm2那样restart后pid依旧保持不变?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

只要发生进程的结束和(重新)启动,pid就一定会重新分配(有可能正好是同一个,但一般不是)。pm2我没用过,但如果你观察到一个“进程”“重启”后pid不变,那你观察的那个进程可能并不是真正被重启的进程,而是控制进程,或者说master进程没有重启,worker进程重启了,而你看到的是master进程的pid;也有可能你看到的不是pid,而是管理程序分配的内部id。
如果真的要实现pid不变而重启进程,我能想到的是调用exec,具体怎么调用估计就要写nativeaddon了;想实现对被管理的进程透明的话可能得注入之后想办法调用exec,例如通过插桩或信号处理函数。
                            
查看完整回答
反对 回复 2019-10-16
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

特地去用pm2试了一下,发现并没有你说的这个功能。重启之后pid都会发生变化
最开始我也怀疑stop、start、restart这三个指令可能不会杀掉系统里的进程,但是实际上并不是这样。
我做了以下操作:
检查当前进程pid=20259
执行pm2stop0
查看~/.pm2/pids目录下对应的.pid发现已经被删除了
打开系统进程监视器查看20259进程已经被回收了
执行pm2start0
再次查看~/.pm2/pids目录,发现pid文件已创建,pid=20364
查看进程监视器20364进程创建。
因此得出:pid会改变,进程会被回收
思考补充:
pid代表的是系统的进程,进程被回收则pid会被销毁。pid不改变意味着进程一直占用系统资源,但是stopped状态的程序是不用保留系统进程的,需要销毁。至于有没有机制可以对restart的进程进行pid保留,我不知道。
                            
查看完整回答
反对 回复 2019-10-16
  • 2 回答
  • 0 关注
  • 300 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信