Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active April 14, 2021 08:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arrayadd/09cca7ad4e710fac5a7f84445ebcb788 to your computer and use it in GitHub Desktop.
Save arrayadd/09cca7ad4e710fac5a7f84445ebcb788 to your computer and use it in GitHub Desktop.
【Linux】让任务后台运行

平时我们用CRT,或者Xshell 连接到Linux服务器上执行一些命令操作,执行完成后,关闭窗口完事。但有些场景下,例如,启动一个java程序,而这个程序会每隔1分钟执行一些任务。如果我们用类似命令:

[root@test ~]# java -jar ./test.jar

但这样做有个问题,如果我们关闭终端,这个java进程也会随着退出。


让程序后台运行

linux下有个命令nohup可以让程序后台运行,即使是我们退出了终端,它也会持续运行。

nohup [需要执行的命令] > log.file 2>&1 &

  • 如果不写> log.file 2>&1 nohup默认会把日志输出到当前目录下的nohup.out文件中,如果当前目录下的nohup.out文件禁止写入,则会输出重定向到 $HOME/nohup.out中。
  • 如果不用nohup命令,只是以&结尾,当shell窗口终端关闭,那么程序也会被关闭。
  • 只有当虚拟终端是 $ 或者 # 时候,才可以点击按钮关闭此终端,否则可能导致已经启动的进程被关闭(按enter——如果程序持续输出信息而没有出现 $ 或 #).

查询后台运行程序

当我们退出终端后,再次用Xshell后者CRT登陆服务器,这时候可以用jobs命令来查询后台运行的程序。

jobs -l #显示任务列表

[root@test ~]# jobs -l
[1]- 22330 Running     
[2]+ 22412 Done      
  • [1],[2]是任务编号
  • +号代表当前job - 号代表前一个job。
  • 第三列是进程号。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment