前后台进程
前台进程:在终端中运行的命令,一旦这个终端关闭,这个进程也随之消失;
后台进程:守护进程(Daemon),运行在后台的进程,不受终端控制,不需要跟终端交互,如,Web服务器的httpd等;
跟系统任务相关的几个命令:
& |
用在一个命令的最后,可以把这个命令放到后台执行. |
ctrl + z |
将一个正在前台执行的命令放到后台,并且暂停. |
jobs |
查看当前有多少在后台运行的进程.它是一个作业控制命令 |
fg(foreground process) |
将后台中的命令调至前台继续运行, 如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
bg(background process) |
将一个在后台暂停的命令,变成继续执行; 如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) |
举例
Ctrl+z暂停并将vim a.txt放到后台
[root@tzPC ~]# vim a.txt [1]+ Stopped vim a.txt
状态变为T
[root@tzPC ~]# ps -aux | grep vim
root 3892 0.1 0.2 149148 4920 pts/0 T 18:37 0:00 vim a.txt
root 3915 0.0 0.0 112712 960 pts/1 R+ 18:37 0:00 grep --color=auto vim
查看后台进程
[root@tzPC ~]# jobs [1]+ Stopped vim a.txt
将后台挂起的进程恢复到前台运行
[root@tzPC ~]# fg 1
进程优先级管理
优先级取值范围-20~19,越小优先级越高,默认是0
命令1:nice 指定程序的运行优先级
格式:nice -n command
命令2:renice 改变程序的运行优先级
格式:renice -n pid
举例
指定运行vim的优先级为5
nice -n 5 vim a.txt
ctral+z挂起
查看进程ID
ps -aux | grep vim
查看优先级
top -p 3985
修改进程优先级
renice -10 3985
划重点!
使用screen后台实时执行备份命令
Screen有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中能操作一个像SSH/telnet那样的连接。
实战场景:公司晚上要备份1T数据,在xshell上直接执行备份脚本back.sh可行吗?或者直接运行back.sh&放到后台运行可以吗?关闭xshell后back.sh&还在后台执行吗?
答:xshell长时间连接,如果本地网络偶尔断开或xshell不小心关闭,都将让备份命令停止运行。
安装screen
yum -y install screen
安装完成后输入screen会创建一个新的ssh窗口
在这个窗口vim a.txt 输入某些内容后ctrl+z挂起,然后按住ctrl+a+d,这个screen就会被分离出来,回到最开始的终端窗口
[root@tzPC ~]# screen [detached from 4044.pts-0.tzPC]
查看挂起的会话
[root@tzPC ~]# screen -ls There is a screen on: 4044.pts-0.tzPC (Detached) 1 Socket in /var/run/screen/S-root.
进入挂起的会话
screen -r 4044
退出会话
exit
常用screen参数
screen -S test 新建一个叫test的会话
screen -ls 列出当前所有的会话
screen -r test 回到test会话
screen -d -r test 结束当前会话并回到test会话