Невозможно уничтожить процесс linux, используя узел js process.kill (pid) - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь убить фоновый процесс, используя nodejs process.kill(pid, 'SIGTERM'), но процесс не прекращается.

Я выполнил скрипт узла, упомянутый ниже, и позже проверил процесс, используя ps -efww | grep 19783 | grep -v grep из приглашения, чтобы подтвердить, что он все еще не уничтожен.

Я могу подтвердить, что процесс, который он пытается уничтожить, запущен тем же пользователем , поэтому проблема с разрешением отсутствует.

Есть что-то, что мне нужно передать, чтобы убить процесс.

Версия узла: 8.11.1

ОС: Linux 3.10.0-327.10.1.e17.x86_64

Ссылка: Узел процесса

код:

'use strict';

const argv = require('yargs').argv;
const exec = require('child_process').exec;

function execute(command) {
    console.log("Executing Command : ", command);
    return new Promise((resolve, reject) => {
        exec(command, {
            maxBuffer: 1024 * 5000000
        }, (error, stdout, stderr) => {
            if (error) {
                console.log(`ERROR: Something went wrong while executing ${command}: ${error}`);
                reject(error);
            } else {
                resolve(stdout);
            }
        });
    });
}

function kill(pid) {
    try {
        console.log(`Killing Process : ${pid}`);
        process.kill(pid, 'SIGTERM');
        let command = `ps -efww | grep ${pid} | grep -v grep | grep -v dzdo `;
        let output = execute(command).then(res => {
        console.log(`output: ${res}`);
        }).catch(err => console.log(err));
    } catch (e) {
        console.log(`Invalid Process ID:${pid}, failed during kill, "ERROR: ${e}"`);
    }
}

function main() {
    // remove all spaces;

    if (argv.kill) {
        let allPIDs = argv.kill || undefined;
        // console.log(`ALL PID's: ${allPIDs}`);
        allPIDs = allPIDs.toString().replace(/\s/, '').split(',');
        if (allPIDs.length > 0) {
            allPIDs.forEach(pid => {
                if (!isNaN(pid)) {
                    // console.log(`Valid PID: ${pid}`);
                    kill(pid);
                } else {
                    console.log(`ERROR: Invalid Process ID : ${pid}, Skipped Kill `);
                }
            });
        }
    }
}

main();

Предполагается, что этот код сохранен как killer.js

Использование: node killer.js --kill=19783

1 Ответ

1 голос
/ 15 апреля 2019

Попробуйте SIGKILL вместо SIGTERM

doc говорит

'SIGKILL' не может установить прослушиватель, он безоговорочно завершит работу узла.js на всех платформах.

Так что я думаю, стоит попробовать.

...