Why is my Node child process that I created via spawn() hanging?

前端 未结 1 500
無奈伤痛
無奈伤痛 2021-01-04 19:56

I am using spawn() to make a git call. Sometimes it works fine but others it appears to be hanging. I see no events firing (error, exit, close) yet I see evidence that the

相关标签:
1条回答
  • 2021-01-04 20:26

    As it turns out once the stderr buffer exceeds 24kb you must be reading from it or you not see any events for completion. Possible workarounds:

    1. Set the stdio option on the spawn call.

      spawn('git', ['push', 'origin', 'master'], {stdio: 'ignore'});
      

      See Node ChildProcess doc for all of the possibilities - there are lots.

    2. Add an on(data) handler.

      var git = spawn('git', ['push', 'origin', 'master']);
      ...
      git.stderr.on('data', function(data) {
        // do something with it
      });
      
    3. Pipe it to stdout / stderr. This may be too verbose for your application but including it for completeness.

      var git = spawn('git', ['push', 'origin', 'master']);
      ...
      git.stderr.pipe(process.stderr);
      git.stdout.pipe(process.stdout);
      
    0 讨论(0)
提交回复
热议问题