Дъщерен процес на възел, каналът е затворен при process.send

В моя работен файл слушам за обратно извикване на данни. someLib е сериен порт на възел.

process.on('message', function(msg) {
    someLib.on('data', function(data){
        console.log('some data');
        process.send(data);
    });
});

Това се отпечатва

some data
Error: channel closed

Но

process.on('message', function(msg) {
    process.send('foobar');
});

работи добре. Странно е, но понякога първият примерен код работи, така че грешката за затворен канал се появява на случаен принцип.

От http://nodejs.org/api/child_process.html#child_process_event_error получавам информация, че грешката се задейства, когато

Sending a message to the child process failed for whatever reason.

Какво е "каквато и да е причината"? Някакви идеи?


person Upvote    schedule 08.06.2014    source източник


Отговори (2)


Проблемът беше, че раздвоените дъщерни процеси не бяха затворени правилно, когато родителят беше убит. Това доведе до множество призрачни процеси, които причиниха грешка при затваряне на канала.

Включих се в SIGHUP и ги убих грациозно. Сега всичко работи.

person Upvote    schedule 09.06.2014

Трябва да посочите типа събитие, тъй като с process.send(data) просто изпращате обект.

person Pio    schedule 08.06.2014
comment
Какъв вид? Според nodejs.org/api/ не е необходимо да има тип - person Upvote; 09.06.2014
comment
Да, но във вашия код вие регистрирате слушател на събития всеки път, когато се получи съобщение. Мисля, че искате да извикате функция там. Така че вместо someLib... просто извикайте функцията директно като process.send(data). Или можете да направите нещо, което е точно под мястото, където ме посочихте. - person Pio; 09.06.2014
comment
Съжалявам, не сте ме разбрали, someLib.on се извиква веднъж, моят код беше само кратка версия. Редактирах въпроса си. - person Upvote; 09.06.2014
comment
Добре, сега има смисъл. Предполагам, че проблемът е някъде в someLib. - person Pio; 09.06.2014
comment
Трябва да е, бих искал да разбера. - person Upvote; 09.06.2014