我有一个bash脚本,该bash脚本使用唯一的ID多次调用,并且我已经使用socket io在stdout函数上发送消息
shell脚本包含两个操作:
- Action1
- Action2
Action2是一个后台进程,所以我不想等待脚本完成,因此当Action1完成时,我将打印回显消息(msg),该消息将在stdout函数中捕获,然后发送套接字io消息在stdout函数中
server.js
child_process = exec('bash some-file.sh arg1 arg2')
child_process.stdout.on('data', function) {
if ((data).indexOf(msg) > 1) {
io.sockets.emit('Completed for id: ' + id)
}
});
上述代码的问题是,当我多次调用上述动作时,它对于第二次迭代不起作用(即id 1仍然存在),因为后台动作(Action2)仍在id 1的后台运行。
如何对child_process进行多线程处理?
答案 0 :(得分:0)
您可以使用child_process.fork
并从子流程(Actions2)发送消息
main.js
const child_proc = require('child_process');
const sub = child_proc.fork(`${__dirname}/sub.js`);
sub.on('message', (m) => {
console.log('PARENT got message:', m);
});
sub.send({ from: 'server' });
sub.js
process.on('message', (m) => {
console.log('CHILD got message:', m);
});
process.send({ from: 'client' });