如何在Node JS子进程中执行多线程

时间:2018-08-28 12:23:45

标签: node.js multithreading child-process

我有一个bash脚本,该bash脚本使用唯一的ID多次调用,并且我已经使用socket io在stdout函数上发送消息

shell脚本包含两个操作:

  
      
  1. Action1
  2.   
  3. Action2
  4.   

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进行多线程处理?

1 个答案:

答案 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' });

这里是documenta good article explained it