我有一个Node.js脚本,它可以分叉这样的另一个进程:
// parent.js
const { fork } = require('child_process');
const child = fork('child.js', [], { detached: true });
child.pid // e.g. 1234
child.send({ test: 'hello world!' })
对于每个文档,detached: true
使得子进程有可能在父级退出后继续运行,这正是我想要的。
即使父进程崩溃或重新启动(或者有多个进程需要与同一个子进程一起使用),子进程也将保持活动状态。将子进程视为单实例守护程序。
我知道,只要子进程正在运行,父进程就绝不会崩溃或停止,但是我的程序中不是这种情况;子进程运行时,父进程将停止。
只要父进程正在运行,此方法就很好用。我遇到的问题是家长重新启动时。用简单的英语来说,我该如何告诉父进程:
嘿,父母,这是上次在pid:1234下运行的过程。我不希望您派生一个新的过程。您可以将邮件发送到现有邮件吗?
为澄清起见,问题不在于持久保留pid。这是关于获得一个新的类似于ChildProcess的对象,该对象引用了旧的对象。
如果由于流程的性质,我在这里所做的任何事情在架构上是错误的/不可能的,那么您还建议如何做?例如两台服务器通过TCP套接字进行通信?