Проблема с разветвленным дочерним процессом убивает родительский процесс без отображения ошибки - PullRequest
2 голосов
/ 17 июня 2020

У меня есть дочерний процесс, который перебирает цвета, чтобы получить палитру. Он отлично работает с небольшими изображениями, но когда я загружаю большие, происходит сбой (4k вылетает, 2k нет), и не дочерний процесс, а весь мой сервер. PM2 его быстро перезагружает, но я не хочу, чтобы это вообще происходило.

Это код, который создает дочерний процесс:

        const countColors = fork('count-colors.js', [], {cwd: './modules/node/image-processor', stdio: [ 'pipe', 'pipe', 'pipe', 'ipc' ]});

        //send the pixel data to the process
        countColors.send(pixels);

        countColors.on('message', message => {
            console.log('message from child:', message);

            callback(message.error, message.colors);
            return countColors.kill();
        });

И этот код находится в дочернем процессе (count-colors. js):

process.on('message', data => {
    var pixels = data.data;
    var colors = [];

    for (var i = 0; i < pixels.length; i+=4) {

        var hex = hex(pixels[i + 0], pixels[i + 1], pixels[i + 2], pixels[i + 3]);
        if (!colors.includes(hex))
            colors.push(hex);

        if (colors.length>256) return process.send({error: 'Image has over 256 colors'});

    }

    process.send({colors: colors});
});

К сожалению, он не говорит мне, что происходит, кроме этого:

PM2        | App [www] with id [1] and pid [6160], exited with code [0] via signal [SIGKILL]
PM2        | Starting execution sequence in -fork mode- for app name:www id:1
PM2        | App name:www id:1 online

Есть ли способ предотвратить ошибку sh или хотя бы получить дополнительную информацию о том, почему это происходит? Я должен сказать, что приведенный выше код находится в блоке try {}, но это, похоже, не имеет значения.

1 Ответ

0 голосов
/ 25 июня 2020

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

Однажды сказано, что вы можете попытаться разделить данные сообщения на куски.

Надеюсь, это поможет

...