Уничтожение процесса sudo после запуска его с помощью Node.js в Linux - PullRequest
0 голосов
/ 19 января 2019

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

...