Perl:由于print语句

时间:2016-07-01 12:16:27

标签: linux perl unix background-process

我想在我使用的后台(linux机器)中运行perl文件  & 但由于其中包含print语句,我无法在后台运行。 例如:test.pl

 #!/usr/bin/perl
 print "Hello world";
 while (1)
 {
 }

当我在后台以perl test.pl & 运行时,它会挂起,但是当我对print语句发表评论时,它会正确地在后台运行。 我的实际代码是巨大的,这只是我需要解决方案的一个例子,      这只是一个原型,实际上我在perl中做并发服务器,所以我需要在后台运行它并打印调试信息,我已经尝试了很多东西但是无法处理这种在后台运行的情况,即使在评论打印后现在它仍然没有在bkgrnd

中运行

3 个答案:

答案 0 :(得分:1)

您的程序 在后台运行。这可以使用ps命令进行简单验证。例如,ps ax | grep name_of_your_script

您没有看到打印输出的原因是输出缓冲。如果您为打印添加换行符(print "Hello world\n"; - 请注意\n),则会立即刷新输出缓冲区,导致文本显示在屏幕上。

答案 1 :(得分:0)

您可以使用perl test.pl >/dev/null,输出将转移到/dev/null

答案 2 :(得分:0)

当你的shell及其前台作业以外的东西写入终端时,你不能假设所有东西都会以方便的顺序打印。

也许你没有注意到提示,因为它高于后台进程的输出。或者,由于光标移动的时间不合适,后台进程的输出可能会覆盖shell提示符。

这些事情可能发生,因为shell和后台进程都在同时写入终端而没有它们之间的协调。

您的shell可能正在等待您键入命令,即使提示符和游标不在您期望的位置。继续并键入命令,看看它是否有效。或者只需按Enter键即可获得新提示。在zsh中,redisplay动作(在vi模式下为Ctrl-R)在这种情况下使用是一件好事。据我所知,bash没有等价物。