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

ACa*_*ter 10 ps nohup

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

  • 当 shell 没有 `&amp;` 操作符时,没有 `nohup` 是不可用的,它是为了使进程免受其父 shell 或会话领导者终止时发送的 HUP 信号的影响。 (3认同)
  • @ACarter 不,`exit 1` 通常意味着异常终止。正常退出的程序通常以状态 0 退出。尽管脚本真的可以为所欲为。 (2认同)

TTT*_*TTT 6

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)

正如帕特里克解释的那样,方括号之间的数字是一个有序的工作编号。+ 仅用于最新的作业,- 用于它之前的作业。所有其他作业都没有任何符号。