2

私の最新プロジェクトの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でプルリクエストを実行して、なぜそれが機能しないのかを説明できるアイデアがあれば?これを機能させることができれば、本当に便利なCLIツールになります。

乾杯

4

1 に答える 1

2

これはハックですが、機能します。

Mac と Linux では、アプリに応じて exec された PID に +1 または +2 を追加する必要があります。1 または 2 である理由がわかりません。ノードのバージョンまたは OS に依存していないようです。特定のアプリの場合、オフセットは常に同じです。これは確かに言えます。

興味深いのは、child.spawn では調整が必要ないことです。

これで問題は解決しますが、根本的な原因には対処できません。child.exec でオフセットが何であるかを誰かが理解しているなら、それは素晴らしいことです。

于 2012-12-31T02:53:45.853 に答える