节点可执行文件中返回了错误的pid

Wrong pid returned in node executable

本文关键字:错误 pid 返回 可执行文件 节点      更新时间:2024-03-04

正在为我的最新项目开发cli工具。我正在编写一个停止方法,并试图根据其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上做一个拉取请求,并解释为什么它不起作用?如果我能做到这一点,那将是一个非常方便的cli工具!

干杯

这是一个破解,但它有效。

在mac和linux上,我必须根据应用程序在执行PID中添加+1或+2,不知道为什么是1或2,似乎不取决于节点版本或操作系统。对于给定的应用程序,偏移量总是相同的,我可以肯定地说。

有趣的是,对于child.spawn,不需要进行任何调整。

这解决了您的问题,但并没有解决根本原因。如果有人知道child.exec中的偏移量是多少,那就太好了。