Node.js перехватывает process.exit

Итак, я хотел запустить команду оболочки в конце моей программы node.js и дождаться вывод/распечатка перед выходом. Я попробовал process.on('exit',function(){})и запустил там дочернюю команду exec, но программа завершилась до обратного вызова. Поэтому вместо этого я использовал закрытие для process.exit, но получаю странные результаты. Основы кода таковы:

 process.exit = (function(old_exit){
   return function(code){
     var exec = require('child_process').exec;
     var child;
     child = exec("my shell command", function (error, stdout, stderr) {
       if (error !== null) {
         console.log('exec error: ' + error);
       }
       console.log(stdout);
       //I first had this as the concluding line:
       old_exit.apply(process,arguments);
       //and I also tried
       old_exit.apply(process,[]);
       //and even (which I know is not in the right scope)
       old_exit(code);
       //and also
       process.exit = old_exit;
       process.exit(code);
     });
   }
 }(process.exit));

Каждый из приведенных выше результатов выполнил мою команду оболочки ровно дважды, а затем завершился. Я также пытался ничего не вызывать в конце, и хотя это сохраняло его, так что моя команда выполнялась только один раз, процесс зависал вместо выхода в конце. Если нет чего-то, что я просто упускаю, я чувствую, что первая попытка old_exit.apply(process,arguments);у меня была бы правильной и не должна снова вызывать мой собственный код, так и есть. Я также пробовал использовать промисы, которые не работали (они даже не выдавали ошибку из-за многократного разрешения), и я пытался использовать логическое значение, если оно было установлено, но это тоже не сработало. Наконец, я даже попытался выдать ошибку после завершения обратного вызова, но это заставило process.exit снова вызываться после ошибки.Есть идеи?

10
задан user1084563 15 May 2012 в 05:43
поделиться