У меня проблемы с убийством процесса, начатого с 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 перед запуском команды.Также, если я запускаю команду kill из другого процесса или оболочки Node, он работает нормально.