-
子进程与父进程分离
正常情况下,父进程结束后,子进程都会被终结。如果我们想要子进程和父进程进行分离,可以使用spawn分离父子进程,可以使子进程在父进程结束后继续运行。
步骤
- 通过 detached:true 使子进程脱离父进程。
- 将子进程与父进程的IO分离,需要配置 stdio
- 移除父进程对子进程的引用,使用 child_process.unref()
注解
- 步骤二:分离父子进程IO的操作,只需要通过文件描述符将子进程的IO指向别的地方或者直接使用ignore放弃IO。
- 步骤三:即使我们使子进程脱离了父进程,分离了父子进程的IO,但是只要子进程没有终结,父进程任会对子进程有一个内部引用。
实现
const childProcess = require('child_process');
const fs = require('fs');
const FD = fs.openSync('./text.txt', 'w+');//获取一个文件描述符
const customFD = childProcess.spawn('cat', ['execFile.js'], {
detached: true,//子进程是否独立于父进程运行,父进程结束,子进程继续运行。
stdio:['ignore', FD, FD]//分离父子IO
});
customFD.unref();
知识扩展
- 文件描述符
文件描述是一个非负整数,打开现存或者新建文件时,内核就会返回一个文件描述符。这个文件描述符是一个索引值,指向该进程打开文件的记录表
网友评论