让进程在后台运行

1. 让进程在后台运行
Linux进程可以分为前台进程和后台进程,在终端输入命令执行的是前台进程模式。如果一个命令需要运行很久,就会阻塞终端,而且终端断开后命令也会跟着终止。所以我们可以把运行时间很长的任务使用后台模式运行。

$ python3 test.py &
在命令后面加&,它就会在后台运行了。

2. 查看后台运行进程

$ jobs
[1]+ 运行中  python3 test.py &

3. 将前台进程转入后台
有的时候忘记了在命令之后加上&,可以按下Ctrl+Z,把当前程序切换到后台。注意此时在后台的这个程序是处于Stopped状态。先用jobs查看任务的Job ID,然后使用bg命令让任务继续在后台运行。

$ jobs
[1]+ 已停止 python3 test.py
$ bg 1
[1]+ 运行中 python3 test.py &

4. 将后台进程切回前台
先用jobs查看任务的Job ID,然后使用fg命令将后台进程切换到前台

$ fg 1

5. nohup
不管是前台进程还是后台进程,在终端关闭的时候,Linux会发出终端关闭信号,让在终端中运行的进程结束。可以使用nohup命令,让程序运行的时候,忽略掉终端关闭的信号。使用nohup和&组合,可以让一个程序真正永远在后台执行。

$ nohup python3 test.py &

6. 重定向输出
如果后台程序输出到屏幕,即使后台运行,还是会输出到屏幕。这时候可以使用>将输出重定向到文件。

$ nohup python3 test.py 1> stdout.txt 2> stderr.txt  &
1是标准输出的文件描述符,可以省略。2是标准错误的文件描述符,可以通过2>&1重定向到标准输出。