使用pgrep时,Node.js命令出错

时间:2014-01-22 13:02:50

标签: node.js exec grep

在我的代码中,我需要检查程序是否已启动。为此,我有一个“正在运行”的功能:

function running(app, callback) {
    var arg = 'pgrep --count ' + app;
    exec( arg, function(err, stdout, stderr) {
        if (err) {
            console.log('Error:' + inspect(err) + ' ' + stderr);
            callback('0');
        } else {
            var data = '' + stdout;
            callback(data.charAt(0)); //Will be 0 only if no app is started
        }
    });
}

有些时候它运作良好,但现在我得到了:

Error: { [Error: Command failed: ]
[stack]: [Getter/Setter],
[arguments]:undefined,
[type]: undefined,
[message]: 'Command failed: ',
killed: false,
code: 1,
signal: null }  

(stderr为空)

我不明白为什么,所以不能想到任何解决方案。

有谁能告诉我为什么会收到此错误?

2 个答案:

答案 0 :(得分:2)

如果没有符合您请求的进程,

pgrep将返回非零状态。 Node会将此非零状态解释为pgrep失败的含义。这可以通过使用echo $?在shell上轻松检查,bash显示上一个命令的退出状态。假设您运行了一些$ pgrep --count bash; echo $? 个实例

bash

您将在控制台上看到正在运行的0实例的数量以及将为$ pgrep --count nonexistent; echo $? 的退出代码。现在,如果您尝试使用不存在的东西:

0

您会看到1的计数和pgrep的退出状态。

以下是EXIT STATUS 0 One or more processes matched the criteria. 1 No processes matched. 2 Syntax error in the command line. 3 Fatal error: out of memory etc. 关于退出状态的手册页:

var count;
if (err) {
    if (err.code === 1)
        count = 0; // Status 1 means no match, so we don't have to parse anything.
    else {
        // Real error, fail hard...
    }
}
else {
    count = ... ; // parse count from stdout
}
callback(count);

所以你可以用这样的结果检查结果:

{{1}}

答案 1 :(得分:0)

var arg = 'pgrep --count ' + app,

这里有两个问题:

    在Linux上
  1. ,它不是--count它是-c

  2. 该行应以;结尾,而不是逗号。