2.2.3 后台任务

在一条命令后加上&符号可以让其在后台运行。尝试man top &,你会得到类似的输出[1] 12768。其中,第一个数字是任务号,由终端自动分配;第二个数字是PID。现在man top已经在后台运行了,你可以通过任务号在命令行里与后台任务进行交互。尝试在后台打开另一个任务,然后输入fg 1,你会看到man指令再一次运行起来了。

对于一个任务,你可以使用Ctrl+Z来将它挂起。不加参数的fg命令总是会执行最近一个被挂起的任务或者后台任务(注意两者的区别)。刚才分配的任务号只在这一个终端里才是有效的,通过输入jobs可以看到后台运行的任务,jobs -l还可以同时输出这些任务的PID。

nohup会在后台运行一个程序,特别是这个程序在终端退出后还能继续执行。在终端退出后,程序的输出以及报错信息会保存到nohup.out文件(在你运行这个进程的目录下)。这时要讲到之前学过的重定向了。你可以把输出信息重定向到另外的文件,1>是重定向到stdout,2>是重定向到stderr,&>是同时重定向到stdout与stderr:

      $ nphup myprog &>backgroundoutput.txt &

nohup常见的一个使用场景与网络连接有关。举例来说,你想要重启一个已经连接成功的网络:

      $ sudo nohup sh -c "ifconfig wlan0 down && ifconfig wlan0 up"

注意,输出的nohup.out文件需要sudo权限才可以读写。当然,你也可以自行修改权限:

      $ sudo chown pi:pi nohup.out

nohup对那些要长时间在后台运行的程序很有用,比如一个传感器程序。