“[1]+ Exit 1”响应是什么意思?

“[1]+ Exit 1”响应是什么意思?

我运行此命令来尝试让我的 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

正如帕特里克所解释的,方括号之间的数字是有序的工作编号。 + 仅针对最新作业给出,而 - 则针对其之前的作业给出。所有其他作业没有任何符号。

相关内容