NodeJs重启程序时,如何保证PID不变?重启程序,每次都生成不同的pid,如何做到pm2那样restart后pid依旧保持不变?
2 回答
胡子哥哥
TA贡献1825条经验 获得超6个赞
只要发生进程的结束和(重新)启动,pid就一定会重新分配(有可能正好是同一个,但一般不是)。pm2我没用过,但如果你观察到一个“进程”“重启”后pid不变,那你观察的那个进程可能并不是真正被重启的进程,而是控制进程,或者说master进程没有重启,worker进程重启了,而你看到的是master进程的pid;也有可能你看到的不是pid,而是管理程序分配的内部id。如果真的要实现pid不变而重启进程,我能想到的是调用exec,具体怎么调用估计就要写nativeaddon了;想实现对被管理的进程透明的话可能得注入之后想办法调用exec,例如通过插桩或信号处理函数。
牧羊人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保留,我不知道。
添加回答
举报
0/150
提交
取消