我运行这个命令来尝试让我的 python 程序在后台运行,并让我退出我正在使用的 SSH 连接:
nohup python files.py >> files.log &
Run Code Online (Sandbox Code Playgroud)
然后我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
Run Code Online (Sandbox Code Playgroud)
这[1]+ Exit 1
是什么意思?
以及如何在后台运行我的程序让我正确退出?
phe*_*mer 13
当您&
在 bash 中的命令末尾使用时,它会在后台运行该命令。在[1]+ Exit 1
该作业1状态1.退出之间的数量手段[]
是工号,并在数字后Exit
是退出状态。如果未显示退出状态,则表示命令以 status 退出0
。
您在运行另一个命令之前看不到这一点的原因是,默认情况下,在提示更新之前,不会显示已完成的后台命令的状态。这意味着在另一个命令退出后,或者您只需按<ENTER>
一个空提示。
编辑:
您也不需要使用nohup
. 当 shell 本身收到 HUP 时,Bash 只会 HUP 一个进程。如果您干净地退出(通过exit
, 或 CTRL+D),则不会发生这种情况。
但是,您也可以使用disown
内置函数来使特定作业不会获得 HUP。
最后,您还可以设置一个 SIGHUP 处理程序,以便在 shell 通过执行function sighup { disown -a; exit 0; }; trap sighup HUP
.
Patrick 的回答是正确的,尽管 Stéphane 的观点对于nohup
不同版本的用户很重要。但是,没有给出 +(加号)符号的意义。在这里,它表示它是“当前”作业。例如,如果我一次提交 3 个命令:
$ sleep 5&
[1] 29056
$ sleep 5&
[2] 29091
$ sleep 5&
[3] 29147
Run Code Online (Sandbox Code Playgroud)
然后等5秒,按回车,输出为:
[1] Done sleep 5
[2]- Done sleep 5
[3]+ Done sleep 5
Run Code Online (Sandbox Code Playgroud)
正如帕特里克解释的那样,方括号之间的数字是一个有序的工作编号。+ 仅用于最新的作业,- 用于它之前的作业。所有其他作业都没有任何符号。