为我的最新项目使用cli工具。我正在编写一个stop方法,并尝试根据其pid来终止节点进程。
这是我的代码,但看起来我只是获得了grep函数的pid
#!/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上做拉取请求并解释为什么它不起作用?如果能让这个工作起作用,那将是一个非常方便的cli工具!
干杯
答案 0 :(得分:2)
这是一个黑客,但它确实有效。
在mac和linux上,我必须根据应用程序向exec" d PID添加+1或+2,无法弄清楚为什么它的1或2,似乎没有依赖于节点版本或操作系统。对于给定的应用程序,偏移量总是相同的,我可以肯定地说。
有趣的是,对于child.spawn,没有必要进行调整。
这解决了您的问题,但没有解决根本原因。如果有人弄清楚child.exec中的偏移是什么,那就太棒了。