没有调用命令,这个spawn语法出了什么问题?

时间:2016-02-23 22:44:56

标签: node.js

当我手动运行这个pidof命令时,它可以工作。然后放入我的server.js。

// send signal to start the install script
var spw = cp.spawn('/sbin/pidof', ['-x', 'wait4signal.py', '|', 'xargs', 'kill', '-USR1']);

spw.stderr.on('data', function(data) {
    res.write('----- Install Error !!! -----\n');
    res.write(data.toString());
    console.log(data.toString());
});

spw.stdout.on('data', function(data) {
    res.write('----- Install Data -----\n');
    res.write(data.toString());
    console.log(data.toString());
});

spw.on('close', function(data) {
    res.end('----- Install Finished, please to to status page !!! -----\n');
    console.log('88');
});

在网络上我只看到“-----安装完成,请转到状态页面!!!”。我的安装脚本似乎永远不会得到这个USR1信号。有什么问题吗?

1 个答案:

答案 0 :(得分:0)

问题是您有两个单独的命令。您正在将/sbin/pidof命令的输出传递给xargs命令的输入流。如果您正在使用spawn(而不是exec,这与您在命令行中编写的字符串完全相同),则需要为每个命令生成一个进程。

按如下方式生成您的流程:

const pidof = spawn('/sbin/pidof', ['-x', 'wait4signal.py']);
const xargs = spawn('xargs', ['kill', '-USR1']);

现在将第一个进程的输出传递给第二个进程的输入,如下所示:

pidof.stdout.pipe(xargs.stdin);

现在,您可以在xargs进程中收听事件,如下所示:

xargs.stdout.on('data', data => {
  console.log(data.toString());
});