Linux后台执行指令&和nohup

Posted by AspenStars on May 16, 2020

Linux后台执行指令:&和nohup

&

在命令后面加上& 实现后台运行

实例:

1
2
3
python test.py &

jupyter notebook &

适合一些执行时间较长的非交互式命令,比如开启jupater notebook,查找find等等

如果需要输出信息,可以将输出信息重定向到文本文件

1
jupyter notebook > out.txt 2 > &1 &

这条命令将所有的标准输出和错误输出都重定向到一个叫做out.txt的文件中

终止进程

当成功地提交进程以后,会显示一个进程号,可以用它来监控该进程或杀死它,也可以使用下面的命令找到进程号pid,然后使用kill杀掉

1
2
ps -ef | grep jupyter
kill -9 进程号

nohup

使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。

nohup命令可以在你退出帐户之后继续运行相应的进程。

nohup就是不挂起的意思( no hang up)。

该命令的一般形式为:

1
nohup command &

如果使用nohup命令提交作业,那么在默认情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

1
nohup command > myout.file 2>&1 &

其他

将一个正在前台执行的命令放到后台,并且处于暂停状态:

1
ctrl + z

终止前台命令:

1
Ctrl+c

查看当前有多少在后台运行的命令

1
jobs

jobs -l选项可显示所有任务的PID

jobs的状态可以是

  • running
  • stopped
  • Terminated

但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识

2>&1解析

1
 command >out.file 2>&1 &

Linux中标准输出是1,标准错误输出是2

因此2>&1是将标准错误输出重定向到标准输出

标准输出重定向到out.file

因此就是将标准输出和错误输出都重定向到这个文件中

### 参考资料

  1. liuyanfeier - linux后台执行命令:&和nohup

写得非常清楚,本文大部分均参考此文章,在实践的基础上进行了修改