如果我在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
。
答案 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);
已更新:
所以您只需要导出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)
}