我运行此命令来尝试让我的 python 程序在后台运行,并让我退出正在使用的 SSH 连接:
nohup python files.py >> files.log &
然后我检查ps
它是否有效
$ ps a
PID TTY STAT TIME COMMAND
13059 pts/0 Ss 0:00 -bash
13327 pts/0 R+ 0:00 ps a
[1]+ Exit 1 nohup python files.py >> files.log
这是什么[1]+ Exit 1
意思?
我怎样才能在后台运行我的程序让我正确退出?
答案1
当您在 bash 中的命令末尾使用 时&
,它会在后台运行该命令。表示[1]+ Exit 1
作业 1 退出,状态为 1。 之间的数字[]
是作业编号,后面的数字Exit
是退出状态。如果没有显示退出状态,则意味着该命令以 status 退出0
。
在运行另一个命令之前您看不到此内容的原因是,默认情况下,在更新提示之前不会显示已完成的后台命令的状态。这意味着在另一个命令退出后,或者您只需<ENTER>
按空提示符即可。
编辑:
您也不需要使用nohup
.当 shell 本身收到 HUP 时,Bash 才会 HUP 进程。如果您干净地退出(通过exit
、 或 CTRL+D),则不会发生这种情况。
不过,您也可以使用disown
内置函数来实现,这样特定的作业就不会获得 HUP。
最后,您还可以设置 SIGHUP 处理程序,以在 shell 通过执行以下操作获得 HUP 时拒绝所有作业function sighup { disown -a; exit 0; }; trap sighup HUP
。
答案2
帕特里克的答案是正确的,尽管斯特凡的观点nohup
对于不同版本的用户很重要。但是,没有给出+(加号)符号的含义。在这里,它表示它是“当前”作业。例如,如果我要一次提交 3 个命令:
$ sleep 5&
[1] 29056
$ sleep 5&
[2] 29091
$ sleep 5&
[3] 29147
然后等待5秒,然后按回车键,输出为:
[1] Done sleep 5
[2]- Done sleep 5
[3]+ Done sleep 5
正如帕特里克所解释的,方括号之间的数字是有序的工作编号。 + 仅针对最新作业给出,而 - 则针对其之前的作业给出。所有其他作业没有任何符号。