我通过 ssh 连接到 ubuntu 12.04 云服务器并启动一个 Web 服务器,如下所示(使用 bash):
$ nohup python tserver.py &
[2] 2122
$ nohup: ignoring input and appending output to `nohup.out'
运行该命令后,提示消失。只有一个空行。我可以通过按“回车”来恢复提示——即在我按回车后,我再次看到 $。但我想编写其中一些命令的脚本(打开几个不同的 Web 服务器实例)。所以我不想编写类似“发送输入命令”之类的脚本。这里发生了什么?为什么我会丢失提示?如何编写一系列此类命令的脚本?
答案1
您正在将应用程序置于后台,并且应用程序正在生成输出。您的提示仍然存在,只是显示了额外的内容。
例如:
$ ( sleep 1 && echo hello ) &
[1] 24764
$ █
然后延迟 1 秒后,我得到:
$ ( sleep 1 && echo hello ) &
[1] 24764
$ hello
█
只是将echo
输出写入您的终端,并出现在光标当前所在的位置。 shell 不知道已显示输出。您可以继续输入,就好像该输出不存在一样(它只是变得难以阅读)。
然而,一个干净的解决方案是重定向输出:
nohup python tserver.py >/dev/null 2>&1 &
答案2
尽管您确实通过声明在后台启动了程序&
,但后台进程的输出仍然定向到当前终端的标准输出。
这意味着您的提示被类似echo '\r\n'
(覆盖当前行,以防下一个提示完全消失)或echo "Someotherstuff"
(Someotherstuff
在提示前面打印,然后转到终端的下一行)之类的内容覆盖。
如果按ENTER,您将只输入一个换行符,这会使您的提示再次打印。