4、进程管理
概述
进程管理是操作系统中一项非常重要的功能,因为进程是运行中的程序,而操作系统本身就是通过进程来完成各种任务的。一个进程会占用四类资源,包括cpu、内存、网络和磁盘资源,而且至少会占用cpu和内存资源。
服务就是进程,但是有些进程并不是服务,因为服务必须具备一定的功能。进程是运行中的程序,而服务则是具备某种特定功能的进程。
在Linux中,第一个进程是整个系统的父进程。在RHEL6及之前的版本中,第一个进程叫做init,负责启动后续进程,nit有问题,通过init进程启动的后续进程,都是串行启动的,串行启动的进程意味着速度较慢;而在RHEL7及之后的版本中,第一个进程叫做systemd,相比init,systemd采用并行启动方式,启动速度更快。
常用操作:
查看进程:ps,pstree,w
杀进程: pkill
作业:jobs,bg,fg
服务管理:systemctl
进程优先级:nice,renice
常用命令
ps命令
进程管理的作用非常广泛,其中最常用的命令是ps命令。通过ps命令,我们可以查看系统中所有正在运行的进程。其中,最常用的命令是ps aux命令,它可以显示出所有进程的详细信息,包括进程的PID、CPU使用率、内存使用率等等。
例如:ps aux | grep weblogic
pkill命令
另外一个常用的进程管理命令是pkill命令。pkill命令常用来剔除某个用户创建的所有进程,可以通过指定-T选项来指定某个终端,
例如:比如pkill -t pts/0
命令可以剔除由pts/0终端创建的所有进程。
pstree命令
pstree命令可以用来查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清晰地看出是谁创建了谁。
w命令
w命令可以显示出当前登入系统的用户信息,包括用户名、终端、登录时间、CPU使用率等等。
systemctl命令
sytemd管理服务操作,基本上较新的linux发型版都支持systemd管理网络服务
systemd管理的内容不仅仅有service,systemd管理的单位是unit,service只是unit中的一种
systemctl 管理unit
systemctl是用来管理systemd服务的命令,可通过以下命令查看所有systemd管理的unit:
systemctl list-units
另外,以下命令可用于查看所有管理文件的状态:
systemctl list-unit-files
要查看服务的状态,可使用以下命令:
systemctl status [service name]
要停止、启动或重启服务,可使用以下命令:
systemctl stop [service name]
systemctl start [service name]
systemctl restart [service name]
要关闭或开启启动自启动,可使用以下命令:
systemctl disable [service name]
systemctl enable [service name]
要查看服务状态是否为启动状态,可使用以下命令:
systemctl is-active [service name]
要查看服务是否开机自启动,可使用以下命令:
systemctl is-enable [service name]
为了使用自动补全,可安装bash-completion,yum -y install bash-completion
然后重启终端后生效。
systemd管理target
需要了解的只是target的含义,target是有服务组成的一类启动目标,systemd可以设置启动目标,如果systemd指定了一个target作为启动目录,那么下次系统启动的时候就会启动target里的所有服务
我们需要了解的target 有两个:multi-user.target
和graphical.target
multi-user.target 字符界面的linux系统
systemctl isolate multi-user.target
将图形界面临时切换到字符界面
如果你的系统安装了图形界面,你切换到字符界面,ctl + alt +F1~F6都是字符界面
graphical.target 图形界面的linux系统
systemctl isolate grahpical.target
临时切换到图形界面
systemctl get-default
获取系统默认的启动的target
systemctl set-default
设置系统默认启动的target
systemctl set-default multi-user.target
systemctl daemon-reload
修改完service文件后,一定要重新加载才能生生效
jobs命令
关于作业(jobs)调度的说明:
作业本质上还是进程,作业是以shell为单位的,一个shell建立的作业,不会被另外一个shell看到(包括root),但是仍然可以看到作业对应的进程。
前台进程运行在用户眼前的进程就是前台进程,当用户眼前运行一个前台进程时,如果想运行其他进程,必须关闭当前前台进程,或者将该前台进程放到后台(backgrand process)运行**。**
后台进程则不会影响当前 shell 运行其他进程。有些命令并不可以作为后台命令运行,例如 top 命令。
如何判断一个进程到底应不应该放在后台运行?
1、运行时间较长,用户不想再前台等待,该进程可以后台运行结束
2、服务进程,用户想让其永远处于运行状态
将一个进程放到后台可以使用 &
符号,例如 cat &
。使用 jobs
命令可以查看本shell上后台运行的作业,使用 ctrl + z
可以将当前前台进程放到后台,使用 bg
命令可以将后台进程转为前台进程,使用 kill %1
可以通过作业标号删除进程。
注意事项:
当前台进程运行时,可以使用ctrl +c 停止该进程,也可以使用ctrl+z将该进程放到后台,当一个进程由前台通过ctrl+z到后台运行时,会变为stop状态。
示例:
cp testfile testfile2 &
bg命令
ctrl + z
将作业后台运行并停止
bg %1
bg通过job id 将作业放在后台运行,变为运行状态
fg命令
fg %1
fg通过job id 将作业放在前台运行
lscpu命令
查看cpu情况
nice命令
要在运行进程时指定优先级,可以使用命令:
nice -n <priority> <command>
其中,为优先级,取值范围为-20到19,数值越小表示优先级越高。例如,要将一个进程的优先级设置为5,可以使用命令:
nice -n 5 <command>
renice命令
要调整一个正在运行的进程的优先级,可以使用命令:
renice -n <priority> <pid>
其中,为新的优先级,为进程的PID。例如,要将PID为17443的进程的优先级设置为-30,可以使用命令:
renice -n -30 17443
注意,nice值越小,权限越高。同时,PR减去NI始终等于20,NI越大,PR越大。
在使用虚拟机批量部署时,可以通过设置nice值让某台机器的优先级高,从而先完成安装。
要使CPU占用100%,可以使用以下命令:
cat /dev/zero >> /dev/null &
要运行四个这样的进程可以执行命令:
cat /dev/zero >> /dev/null & cat /dev/zero >> /dev/null & cat /dev/zero >> /dev/null & cat /dev/zero >> /dev/null &
要查看CPU占用情况,可以使用top命令。