如何获取/查找已经运行的子进程?

时间:2019-07-13 02:32:32

标签: node.js child-process

如果我在index.js中生成子进程:

const { spawn } = require('child_process')
const terminal = spawn('./start.sh')

我如何从另一个文件(例如processes.get(pid))访问此过程?我希望能够访问整个ChildProcess类,以便可以在第二个文件中使用诸如stdin.write之类的方法。

编辑:我不希望第二个文件每次执行时都启动第二个文件。该过程必须从index.js开始,第二个文件将访问该正在运行的过程,而无需再次启动。


我尝试使用module.exports = { terminal }并将其保存在第二个文件中:

const { terminal } = require('./index.js')
terminal.stdin.write('some command here')

但是这再次产生了该进程,并且我不能同时运行多个该进程。

在我的情况下,我也无法写入/proc/[pid]/fd/0中的套接字,因此无法使用该方法写入stdin

1 个答案:

答案 0 :(得分:0)

脚本1,它将运行子进程

module.exports.startprocess=function startpro(){
var childProces_file1 = require("child_process").spawn('bash', ['./hello.sh'],{stdio: "inherit"})
exports.childProces_file1=childProces_file1;
 }

将调用该函数的脚本2。

var child_process_file2 =require("./file1.js")
child_process_file2.startprocess();
console.log("child process id is",child_process_file2.childProces_file1.pid);

enter image description here

已更新:

所以您只需要导出pid

var childProces_file1 = require("child_process").spawn('bash', ['./hello.sh'],{stdio: "inherit"})
exports.childProces_file1=childProces_file1;
 childProcess.on('data', function(data){
    process.stdout.write("python script output",data);
    exports.pydata=data;
});

因此文件可以获取pid

var child_process_file2 =require("./file1.js")
console.log("child process id is",child_process_file2.childProces_file1.pid);
if ( child_process_file2.pydata){
    console.log(child_process_file2.pydata)
}