知识点:
1、后台程序基本上不和用户交互,优先级别稍微低一点 ; 前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点。
2、前台进程就是用户使用的有控制终端的进程;守护进程的意思就是不受终端控制。
3、linux下执行sh文件的四种做法
方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:./test.sh
方法二:以绝对路径的方式去执行bash shell脚本:/home/user1/test.sh
方法三:直接使用bash 或sh 来执行bash shell脚本:sh test.sh bash test.sh。该方法执行脚本,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将test.sh作为参数传给sh(bash)命令来执行的。这时不是test.sh自己来执行,而是被人家调用执行,所以不要执行权限
方法四:在当前的shell环境中执行bash shell脚本:. test.sh source test.sh
几种方法的对比:
前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
1、nohup
用途:不挂断地运行命令。
可以使用nohup命令忽略所有挂断(SIGHUP)信号,来实现在终端关闭后,命令不挂断地运行,nohup就是不挂起的意思( no hang up)。
使用 nohup 运行程序:
输出重定向,默认重定向到当前目录下 nohup.out 文件
使用 Ctrl+C 发送 SIGINT 信号,程序关闭
关闭 ShellSession 发送 SIGHUP 信号,程序免疫
2、&
用途:加在一个命令的最后,可以把这个命令放到终端的后台执行
守护进程是不属于终端的单独进程组,终端关闭后,守护进程不会退出。
如果命令没有守护进程,无论加不加&,网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内相关进程退出。
也就是说,终端打开以后,bash等都是他的子程序,一旦终端关闭,系统将所有相关进程杀掉,执行中的任务也就取消了
使用 & 运行程序:
程序转入后台运行,结果会输出到终端
使用 Ctrl+C 发送 SIGINT 信号,程序免疫
关闭 Shellsession 发送 SIGHUP 信号,程序关闭
3、查看当前会话后台运行的作业
jobs -l
4、将一个正在前台执行的命令放到后台,并且处于暂停状态。
Ctrl + z
5、将一个在后台暂停的命令,变成在后台继续执行
bg%jobnumber
6、将后台中的命令调至前台继续运行
fg%jobnumber