在我的代码中,我需要检查程序是否已启动。为此,我有一个“正在运行”的功能:
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为空)
我不明白为什么,所以不能想到任何解决方案。
有谁能告诉我为什么会收到此错误?
答案 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,
这里有两个问题:
,它不是--count
它是-c
该行应以;
结尾,而不是逗号。