目录
后台任务
&符号的使用
如果想让程序在后台运行,执行程序的时候,命令的最后面加“&”符号。
例如:ping指令,会一直返回数据包并在终端显示,按CTRL+c就会停止进程
但是加上&的话,进程会在后台进行,不受当前终端下CTRL+c的控制
ping www.baidu.com &
需要注意的是:
加上&符号的进程在开始执行时会在终端显示该进程的进程PID,方便用户在不用CTRL+c的情况下去杀死该进程
还有,虽然进程会在后台执行,但是如果该进程有输出信息时仍然会在终端上显示
那如何实现让进程在后台执行并且不影响到终端的显示信息?
可以将该进程的终端输出信息重定向到没用的文件里或者文件黑洞中(/etc/null)
重定向
Linux下的三个标准文件描述符(Linux下每个被打开的文件都有一个不会重复的文件描述符,就像每个正在运行的进程都有属于自己的PID一样)
0 - stdin #标准输入流
1 - stdout #标准输出流
2 - stderr #标准错误流
标准输出
使用 1 >代表标准输出,一般直接用简写>代替
$ ls > log # 将ls输出的文本流导入一个文件中
$ ls >>log # 将ls输出的文本流导入一个文件中
注意: > 和 >> 在output.log不存在时,两者相同,都是新建log并将文本流导入。如果log存在时,使用 >> 会将文本添加在结尾。使用 > 会覆盖该文件里的所有内容。
标准错误
使用2 >代表标准错误。
$ rm file 2> log # 将错误提示输出到error.log文件中
$ ls 1>output.log 2>error.log
# 将标准输出流导入文件output.log,将标准错误输出到error.log
注意:1> 中间不能有空格
x>&y
x和y分别表示标准流
2>&1 #将标错误重定向给标准输出
#将标错误和标准输出同时打印到log文件里
ls /home /www >log 2>&1
#也可以用&>
$ ls &>error.log
标准输入这里先不讲,暂时用不到
创建后台任务
既然后台任务的终端显示的问题都解决了,两者结合就可以创建出我们想要的后台任务了
例如:ping的后台任务
ping www.baidu.com >log &
将ping任务在后台运行,并将输出打印到log文件里,终端只会显示一下进程的后台PID,使用kill杀死进程后会有死亡提示
再看一下log内的内容
开机任务自启动
Linux在加载完各项开机启动文件后会执行/etc/rc.local这个脚本文件
将要启动的进程指令加入到该脚本下即可
在Linux开机后执行ping的这个进程,并作为后台进程将标准输出和错误信息扔进黑洞里