在Linux中使用Node.js启动sudo进程后将其终止

时间:2019-01-19 13:08:31

标签: javascript node.js linux sudo child-process

我无法终止以sudo开头的进程。 示例代码:

const { spawn, execFileSync } = require('child_process');
const ps = spawn('sudo', ['sleep', '100']);

console.log('started', ps.pid);

ps.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ps.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ps.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

execFileSync('sudo', ['kill', ps.pid]);
console.log('killed');

当我在Linux(Raspberry Pi或台式计算机)上运行此程序时,Node.js进程一直保持运行状态(我假设它正在等待子进程退出):

$ node test.js 
started 15188
killed
...no more output for 100sec

我可以看到sudo sleepsleep进程仍在与ps ax一起运行。

当我在OSX上运行代码时,它会完美退出:

node test.js 
started 30971
killed
child process exited with code 0

有人可以告诉我这里发生了什么吗? 请注意,在Raspberry Pi上,我具有无密码的sudo,而在mac上,我在运行命令之前会对sudo进行身份验证。 另外,如果我从其他Node进程或Shell运行kill,它也可以正常工作。

0 个答案:

没有答案