У меня есть дочерний процесс, который перебирает цвета, чтобы получить палитру. Он отлично работает с небольшими изображениями, но когда я загружаю большие, происходит сбой (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 {}, но это, похоже, не имеет значения.