在我的代码中,我需要检查程序是否启动。为此,我有一个函数“running”:
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为空)
我不明白为什么,所以想不出任何解决办法。
有人能告诉我为什么我会犯这个错误吗?
最佳答案
pgrep
如果没有与您的请求匹配的进程,将返回非零状态。节点将此非零状态解释为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);
关于node.js - 使用pgrep时Node.js命令出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21283723/