我想在我使用的后台(linux机器)中运行perl文件 & 但由于其中包含print语句,我无法在后台运行。 例如:test.pl
#!/usr/bin/perl
print "Hello world";
while (1)
{
}
当我在后台以perl test.pl & 运行时,它会挂起,但是当我对print语句发表评论时,它会正确地在后台运行。 我的实际代码是巨大的,这只是我需要解决方案的一个例子, 这只是一个原型,实际上我在perl中做并发服务器,所以我需要在后台运行它并打印调试信息,我已经尝试了很多东西但是无法处理这种在后台运行的情况,即使在评论打印后现在它仍然没有在bkgrnd
中运行答案 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没有等价物。