【发布时间】:2019-08-02 06:07:10
【问题描述】:
我在安装了 mysql 和 apache 的 mac 上使用以下 perl 测试脚本有一个奇怪的问题:
# stop all servers
`mysql.server stop 2>&1`;
`apachectl -k graceful-stop 2>&1`;
is apache_is_running(), 0, 'determines if apache is not running';
`apachectl -k start 2>&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>&1";
is mysql_is_running(), 1, 'determines mysql is running';
print "hi\n";
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>&1"; 我尝试使用反引号而不是system,但这没有帮助。如果我取出最后一条命令,它会按预期正常退出。
【问题讨论】:
-
有些包需要一些标准输入。尝试添加
< /dev/null将标准输入设置为空。 -
喜欢这个?
system "mysql.server start 2>&1 < /dev/null";我试过了,没有效果。 -
我通常在标准输出和错误之前设置标准输入。我不记得这是否有任何区别。比如:
system "mysql.server start < /dev/null 2>&1. -
我尝试了
system "mysql.server start < /dev/null 2>&1"和其他一些迭代,但没有运气。 -
如果您运行的是 linux/unix,则需要将其包含在
nohup和&中才能真正在后台运行。如果这是您的情况,您可以尝试:system "nohup mysql.server start 2>&1 </dev/null >log.file &".