Команда в тесте, из-за которой тест не завершается полностью

#mysql #macos #perl

#mysql #macos #perl

Вопрос:

У меня странная проблема со следующим тестовым скриптом perl на Mac с установленными mysql и apache:

 # stop all servers
`mysql.server stop 2>amp;1`;
`apachectl -k graceful-stop 2>amp;1`;

is apache_is_running(), 0, 'determines if apache is not running';
`apachectl -k start 2>amp;1`;

is apache_is_running(), 1, 'determines apache is running';
is mysql_is_running(), 0, 'determines mysql is not running';

system "mysql.server start 2>amp;1";

is mysql_is_running(), 1, 'determines mysql is running';
print "hin";
exit;
  

Когда я запускаю тест с prove -l --verbose , я получаю следующий вывод:

 1..4
# Running my tests
ok 1 - determines if apache is not running
ok 2 - determines apache is running
ok 3 - determines mysql is not running
Starting MySQL
. SUCCESS!
ok 4 - determines mysql is running
hi
  

Затем тест просто зависает и никогда полностью не завершается. Это что-то о последней команде, которая вызывает это: system "mysql.server start 2>amp;1"; Я пробовал использовать обратные ссылки вместо system , но это не помогло. Если я выполняю эту последнюю команду, она завершается нормально, как и ожидалось.

Комментарии:

1. Некоторым пакетам требуется что-то для стандартного ввода. Попробуйте добавить, < /dev/null чтобы стандартный ввод ничего не значил.

2. Нравится это? system "mysql.server start 2>amp;1 < /dev/null"; Я пробовал, никакого эффекта.

3. Обычно я устанавливаю стандартный ввод перед стандартным выводом и ошибкой. Я не помню, имеет ли это какое-либо значение. Что-то вроде: system "mysql.server start < /dev/null 2>amp;1 .

4. Я пробовал system "mysql.server start < /dev/null 2>amp;1" и несколько других итераций, но безуспешно.

5. Если вы используете linux / unix, вам нужно заключить ее в nohup и amp; , чтобы она действительно работала в фоновом режиме. Если это ваш случай, вы могли бы попробовать: system "nohup mysql.server start 2>amp;1 </dev/null >log.file amp;" .

Ответ №1:

Хорошо, это то, что исправило это, но я все еще не понимаю, почему, однако:

 `mysql.server start >/dev/null 2>amp;1`;