Разветвляющиеся подпроцессы на остановках модульных тестов Perl доказывают; Тест:: выход Ремня безопасности

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

14
задан skaffman 25 July 2011 в 22:53
поделиться

2 ответа

Я предполагаю, что все Ваши дети вышли перед отъездом теста? Поскольку иначе, это может держаться за STDERR, который может перепутать, доказывают. Если Вы могли бы закрыть STDERR или по крайней мере перенаправить к каналу в Вашем родительском процессе, который может быть одной проблемой, Вы имеете.

, Помимо которого, я также указал бы, что Вы не должны выходить из наклонных черт вправо, и если Вы не используете метасимволы оболочки (пробелы не являются метасимволами к жемчугу - думают" *?{}()"), необходимо быть явными и создать список:

use File::Spec;
my @cmd = File::Spec->catfile($basedir,
                              File::Spec->updir(),
                              qw(bin monitor_real.pl)
                             ),
          -config => $config,
          -test   =>;

close STDOUT;
close STDERR;

exec (@cmd) or die "cannot exec test code [@cmd]\n";
8
ответ дан 1 December 2019 в 13:10
поделиться

Примечание, которое Вы не тестируете, перестал ли fork() работать. Необходимо удостовериться $pid, , определил прежде, чем предположить, что "ложь" означает "ребенка".

, поскольку Ваш $cmd содержит метасимволы оболочки (пробелы), Perl на самом деле использует оболочку, когда Вы звоните exec(). В то время как Ваш монитор работает, существует (1) Perl, (2) ребенок sh -c и (3) Perl внука, работающий monitor_real.pl. Что это означает, в особенности, когда Вы звоните KillMonitor, Вы только уничтожаете оболочку (потому что это - PID, который Вы имеете), а не монитор.

Вы могли бы также интересоваться , Как я разветвляю процесс демона? от Perl FAQ.

12
ответ дан 1 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: