2012-07-25 49 views
2

爲我的最新項目使用cli工具。我正在編寫一個停止方法,並試圖根據其pid來終止節點進程。在節點可執行文件中返回錯誤的pid

這是我的代碼,但它看起來像我只得到的PID的grep功能

#!/usr/bin/env node 

(function() { 
var args = process.argv.slice(2), 
    exec = require('child_process').exec; 

args.forEach(function (arg) { 
    switch (arg) { 
     case 'start': 
      require('./library/Ubui'); 
      return; 
     break; 
     case 'stop': 
      //I am aware this will kill the grep instance too 
      //but I don't care. Why should we? 
      exec('ps aux | grep ubui.js | cut -c11-15', function (a, b) { 
       var ubuifs = b.split("\n"); 
       console.log(ubuifs); 
       ubuifs.forEach(function (pid) { 
        if (pid !== '') { 
         console.log('\x1b[33mAttempting to kill process pid: ' + pid + '\x1b[0m'); 
         exec('kill ' + pid, function (a, b) { 
          console.log(a, b); 
         }); 
        } 
       }); 
      }); 
     break; 
    } 
}); 
})(); 

如果任何人有任何的想法,你可以在這裏回答或做在github上here pull請求並解釋它爲什麼不起作用?如果我能做到這一點,這將是一個非常方便的cli工具!

乾杯

+0

感謝編輯nfechner,我沒有發現那個錯誤 – 2012-07-25 09:31:56

回答

2

這是一個黑客,但它的工作原理。

在mac和linux上,我必須根據應用程序向exec'd PID添加+1或+2,無法弄清楚它爲什麼是1或2,似乎不依賴於節點版本或操作系統。對於給定的應用程序,偏移總是相同的,我可以肯定地說。

有趣的是,使用child.spawn不需要調整。

這解決了您的問題,但沒有解決根本原因。如果有人知道child.exec中的偏移量是多麼的棒。

+0

這將是因爲'exec'啓動一個shell然後運行這些命令,而'spawn'使用這個命令啓動一個新的進程。 – Ash 2017-05-10 14:04:43

相關問題