Linux作业调度和服务管理
目录
作业调度
调整进程的优先级
服务管理
systemd管理服务操作
systemd管理target(一点点)
作业调度的本质仍然是进程,之所以叫做作业调度,作业是以shell为单位的,一个shell建立的作业,不会被另外一个shell看到(包括root),但是仍然可以看到作业对应的进程。
-
前台进程
运行在用户眼前的进程就是前台进程,当用户眼前运行一个前台进程时,如果想运行其他进程,必须关闭当前前台进程,或者将该前台进程放到后台(backgrand process)运行
-
后台进程
后台进程不会影响用户当前shell运行其他进程。
并不是所有的进程都能作为后台进程运行在后台的。(比如说top命令)
一个进程什么情况可以放在后台进程
-
运行时间较长,用户不想在前台等待,该进程可以运行结束
-
服务(service)进程,用户想永远让其处于运行状态
作业调度
&
在命令行的结尾加上一个&
,就能够使前台进程变为后台进程
可以通过ps
命令进行查看,但是无法判断使前台进程还是后台进程
jobs
命令可以查看后台进程
[root@bogon ~]# cat &[1] 2906[root@bogon ~]# jobs [1]+ Stopped cat
jobs命令是一个阉割版本的ps
,只能查看当前shell运行的后台进程。通过jobs
来管理后台进程。 jobs功能有限,管理范围有限。 jobs管理后台进程,也是使用kill命令,只不过,kill
命令本身也可以向job id
发送相应的信号。 kill + %[后台进程号]
就可以杀死后台进程
[root@bogon ~]# cat &[1] 2923[root@bogon ~]# jobs[1]+ Stopped cat[root@bogon ~]# kill %1[1]+ Terminated cat[root@bogon ~]# jobs
前台进程和后台进程之间的转换 当前台进程运行时,可以使用ctrl+c
停止该进程,也可以使用ctrl+z
将该进程放到后台,注意,当一个进程由前台切换到后台时(ctrl+z),那么该进程的状态就会变成stop,如果你想继续运行该进程,需要使用kill
命令发送让该进程继续运行的信号。
bg %[进程号] : 将前台进程放在后台运行fg %[进程号] : 将后台进程放在前台
调整进程的优先级
最大允许4个进程同时使用100%的cpu,假如说有5个进程需要运行,且该5个进程都需要占用100%的cpu,如果你觉得哪个进程更需要快速运行结束,那么就调整这个进程的优先级。
[root@bogon ~]# nice -n -20 cat /dev/zero /dev/null &
[1] 3077
[root@bogon ~]# nice -n -10 cat /dev/zero /dev/null &
[2] 3079
[root@bogon ~]# top
top - 16:33:15 up 5:24, 2 users, load average: 0.51, 0.17, 0.06
Tasks: 291 total, 3 running, 288 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 31.1 sy, 0.0 ni, 63.5 id, 0.0 wa, 2.1 hi, 2.9 si, 0.0 st
MiB Mem : 1748.7 total, 176.2 free, 984.0 used, 588.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 585.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND3077 root 0 -20 221096 1016 928 S 3.9 0.1 0:01.33 cat 3079 root 10 -10 221096 1020 932 S 1.6 0.1 0:00.52 cat
[root@bogon ~]# renice -n -15 3079
3079 (process ID) old priority -10, new priority -15
[root@bogon ~]# top
top - 16:34:35 up 5:26, 2 users, load average: 0.90, 0.36, 0.14
Tasks: 291 total, 3 running, 288 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 16.4 sy, 0.0 ni, 80.7 id, 0.0 wa, 1.1 hi, 1.5 si, 0.0 st
MiB Mem : 1748.7 total, 176.7 free, 983.4 used, 588.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 586.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND3004 root 20 0 19336 7284 4960 R 31.3 0.4 1:16.80 sshd3077 root 0 -20 221096 1016 928 S 2.0 0.1 0:04.36 cat3079 root 5 -15 221096 1020 932 S 1.0 0.1 0:02.38 cat
[root@bogon ~]# killall cat /dev/zero /dev/null &
[3] 3084
PR与NI的差为20,PR最大为20,最小为0,
- nice -n NI值 进程号 : 调整进程的优先级
- renice -n NI值 进程号 : 调整正在运行中的进程优先级
服务管理
服务就是进程,进程不一定是服务
服务是具备一定功能的进程,但是有些进程并不具备服务的特征,所以服务一定是进程,但是进程不一定是服务。
服务也是进程,就意味着服务也享受着之前学习过的进程的概念。Linux里面的第一个进程,是整个系统的父进程。
在RHEL6版本之前,包括RHEL6,采用的第一个进程叫做init。第一个进程非常重要,因为第一个进程要负责后面所有其他进程的启动,后面其他进程能否启动成功取决于系统能不能正常运行。
init有问题,通过init进程启动的后续进程都是串行启动的,串行启动就意味着速度慢。
在RHEL7版本,采用第一个进程叫做systemd。该进程相比如init来说,采用并行方式启动后续进程,并行启动就意味着速度快。
systemd管理服务操作
systemd管理service
1、查看服务信息
[root@bogon ~]# systemctl status service
2、停止服务
[root@bogon ~]# systemctl stop service
3 、启动服务
[root@bogon ~]# systemctl start service
4、重新启动服务
[root@bogon ~]# systemctl restart service
5、开机自启
[root@bogon ~]# systemctl enable service
6、开机不自启
[root@bogon ~]# systemctl disable service
7、判断服务是否开启
[root@bogon ~]# systemctl is-active service
active
[root@bogon ~]# systemctl is-active service
inactive
8、判断开机自启是否开启
[root@bogon ~]# systemctl is-enabled service
enabled
[root@bogon ~]# systemctl is-enabled service
disabled
9、重新加载配置文件
[root@bogon ~]# systemctl daemon-reload
systemd管理target(一点点)
target是由服务组成的一类启动目标,systemd可以设置启动目标,如果systemd指定了一个target作为启动目录,那么下次系统启动的时候就会启动target里面的所有服务。
multi-user.target就是字符界面的Linux系统
graphical.target就是图形界面的Linux系统
1、临时切换到字符界面
[root@bogon ~]# systemctl isolate multi-user.target
2、临时切换到图形界面
[root@bogon ~]# systemctl isolate graphical.target
3、查看下次开机加载那个target
[root@bogon ~]# systemctl get-default
4、修改下次开机启动的target
[root@bogon ~]# systemctl set-default multi-user.target