我无法终止以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 sleep
和sleep
进程仍在与ps ax
一起运行。
当我在OSX上运行代码时,它会完美退出:
node test.js
started 30971
killed
child process exited with code 0
有人可以告诉我这里发生了什么吗? 请注意,在Raspberry Pi上,我具有无密码的sudo,而在mac上,我在运行命令之前会对sudo进行身份验证。 另外,如果我从其他Node进程或Shell运行kill,它也可以正常工作。