麒麟操作系统之进程管理


麒麟操作系统之进程管理
前言:
1、在LINUX中,每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
2、每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
3、每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4、一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
 
1、进程与服务简介
当程序加载到内存中运行时,内存中的那个数据就称为进程。
* 在麒麟操作系统中,程序通过用户的执行来触发,触发任何一个事件时,系统都会将它定义为一个进程。为了能够管理这个进程,操作系统会给予这个进程一个PID,同时根据触发这个进程的用户和相关属性关系,给予这个PID一组有效的权限设置。
长期运行在内存中的进程,且可以提供一些系统或网络功能,称为服务。
* 服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如mysql,sshd,防火墙等,因此我们又称为守护进程(daemon)。
2、进程的类型
根据进程的特点,把进程可以分为下面三类:
交互进程
由shell启动的进程,它既可以在前台运行,也可以在后台运行。交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行。
批处理进程
与windows原来的批处理很类似,是一个进程序列。该进程负责按照顺序启动其它进程。
守护进程
是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,直到系统关闭时才停止运行。而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务。
根据进程状态的不同,又可以把进程分为另外三类:
守护进程
所有守护进程都可以超级用户(用户ID为0)的优先权运行;守护进程没有控制终端;守护进程的父进程都是init进程(即1号进程)。
孤儿进程
一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程所收养,并由init进程对它们完成状态收集工作
僵尸进程
一个子进程结束但是没有完全释放内存(在内核中的task_struct没有释放),该进程就成为僵尸进程。当僵尸进程的父进程结束后该僵尸进程就会被init进程所收养,最终被回收。僵尸进程会导致资源的浪费,而孤儿进程不会。
 
状态
意义
Runnable(可运行状态)
进程可以被执行
Sleeping(睡眠状态)
进程正在等待某些资源
Zombie(僵化状态)
进程试图消亡
Stopped(停止状态)
进程被挂起(不允许执行)
Runnable   可运行状态
处于可运行状态的进程,代表着它获得了需要的全部资源,只等CPU有时间就可以马上执行。一旦进程执行了一个不能立即完成的系统调用,那么这个进程将转入睡眠状态,等待资源。
Sleeping   睡眠状态
睡眠状态的进程,被阻塞,等待资源以唤醒,也可以通过其他进程信号或时钟中断唤醒,进入可运行队列。有一种深度睡眠状态不可被其他进程信号或时钟中断唤醒。
Zombie   僵化状态
僵化状态的进程,其父进程还没有询问子进程状态时,子进程就已经停止了,称该进程处于僵死状态,资源未释放。为了让父进程能够获取其停止运行的信息,此时子进程的任务数据结构信息还需要保留。
Stopped   停止状态
停止状态的进程,当进程收到相应的信号就会进入暂停状态。
3、服务的类型
     按照服务安装方式,服务可以分为两种:
使用deb、rpm安装包安装的服务:服务的安装位置按照deb、rpm包设定好的目录。这些包启动的服务通常会加入到系统服务目录中,通过service、systemctl等配合参数可以启动(如systemctl start mysqld)。
使用源码包编译安装的服务:可以手动指定安装目录。源码包安装的服务默认需用启动脚本文件的绝对路径配合参数来启动(如/usr/local/nginx/sbin/nginx start)。
4、进程管理
(1)图形管理
点击开始菜单->系统监视器(或在桌面任务栏点击右键选择系统监视器)。如下图,可以看到进程的状态、CPU占用率、优先级、PID、占用内存大小等信息。
 
(2)通过命令查看进程的信息
PS
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。
 例1:查看所有进程。
  • kylin@kylin-1:~$ps aux
USER PID%CPU%MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 130104 6956?Ss 10:44 0:02/sbin/init spl
……此处省略多行……
kylin 7884 0.0 0.1 46064 3360 pts/0 R+11:36 0:00 ps aux
对例1的选项解释说明:
选项
说明
USER
说明该程序是属于哪个用户的
PID
该程序的代号
%CPU
代表该程序使用了多少CPU资源
%MEM
代表该程序使用了多少的RAM
VSZ,RSS
占去的ram的大小(bytes)
TTY
是否为登入者执行的程序?
若为tty1-tty6则为本机登入者,
若为pts/??则为远程登入者执行的程序;
STAT
该程序的状态,
(R)为可执行的
(S)为该程序正在睡眠中,就是没有执行了
(T)正在侦测或是停止了
(Z)僵尸程序,就是zombie死掉的程序
START
该程序开始的日期;
TIME
该程序跑了多久时间;
COMMAND
该程序的内容。
 
小练习
  •  ps aux |grep mate-system-monitor|grep –v grep
  •  pstree -p:pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。
(3)查看进程的实时信息
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
top 选项
ü -c:显示完整的命令。
ü -d:屏幕刷新间隔时间。
ü -p<进程号>:指定进程。
ü -n<次数>:循环显示的次数。
Top的交互命令,在终端输入top后,再在终端输入交互选项。
选项
说明
q
退出程序
k
终止一个进程
s
改变两次刷新之间的延迟时间(单位为s),
如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是3s;
m
切换显示内存信息;
t
切换显示进程和CPU状态信息;
c
切换显示命令名称和完整命令行;
M
根据驻留内存大小进行排序;
P
根据CPU使用百分比大小进行排序
例2:使用top命令实时监控系统的进程状态。
kylin@kylin-1:~$top
top-15:57:35 up 2:30,2 users,load average:0.08,0.02,0.01
Tasks:200 total,1 running,198 sleeping,0 stopped,1 zombie
%Cpu(s):8.1 us,4.7 sy,0.0 ni,87.2 id,0.0 wa,0.0 hi,0.0 si,0.0 st
KiB Mem:2028480 total,956292 free,465084 used,607104 buff/cache
KiB Swap:3142652 total,3142652 free,0 used.1367696 avail Mem
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+COMMAND
6668 kylin 20 0 694448 51076 41240 S 5.6 2.5 7:19.78 mate-syste+
778 root 20 0 250748 71244 30628 S 4.0 3.5 1:02.95 Xorg
6992 kylin 20 0 805332 45000 34660 S 1.3 2.2 0:06.85 mate-termi+
  • 对top命令结果的解释:
  •  top-15:57:35[当前系统时间],
  •  up 2:30[系统已经运行了两个半小时],
  •  2 users[2个用户当前登录],
  •  load average:0.08,0.02,0.01
 [系统负载,即任务队列的平均长度]
  • Tasks:200 total[总进程数],
  • 1 running[正在运行的进程数],
  •  198 sleeping[睡眠的进程数],
  •  0 stopped[停止的进程数],
  •  zombie[僵化进程数],
  • 对top命令结果的解释:
  • %Cpu(s):8.1%us[用户空间占用CPU百分比],
  • 4.7%sy[内核空间占用CPU百分比],
  • KiB Mem:2028480 total[物理内存总量],
  • 465084 used[使用的物理内存总量],
  • 956292 free[空闲内存总量],
  •  607104 buffers[用作内核缓存的内存量],
  • 对top命令结果的解释:
  • PID:进程ID,进程的唯一标识符
  • USER:进程所有者的实际用户名。
  • PR:进程的调度优先级。这个字段的一些值是'rt'。
         这意味这这些进程运行在实时态。
  • NI:进程的nice值(优先级)。越小的值意味着越高的优先级。
         负值表示高优先级,正值表示低优先级
  • S:这个是进程的状态。
它有以下不同的值:
  • D-不可中断的睡眠态。
  • R–运行态
  • S–睡眠态
  • T–被跟踪或已停止
  • Z–僵尸态
(4)进程的优先级和执行顺序
  • 进程cpu资源分配就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的麒麟系统很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。
  • 我们在top中看到的PR和NI两个选项,PR代表这个程序“可被执行的优先级”,也就是动态优先级,越小越早被执行。NI代表这个程序的nice值,nice值就是“系统可被执行的修正数值”,即静态优先级。默认情况下,进程的静态优先级应该是从父进程继承来的,这个值一般是0。
进程的优先级和执行顺序
由于PRI是越小越快被执行,当我们加入nice值之后,将使得PRI变为:
PRI(new)=PRI(old)+nice
当nice值为负值的时候,那么该程序将会提前被执行!但是只有具有root权限的身份者,可以将程序的nice调为负值。
一般使用者可用nice值:0~19
root管理员可用nice值:-20~19
 
nice命令就是设置一个要执行command进程的nice值。
nice[-n number]command
-n:就是后面的number数值
 
renice命令就是设置一个已经在运行的进程的nice值
renice [number] PID
 
例3:将某个将要执行的程序nice值减3。
· kylin@kylin-1:~$nice -n -3 firefox
nice:无法设置优先级:权限不够
公共的 模板 视频 图片 文档 下载 音乐 桌面
· kylin@kylin-1:~$sudo nice -n -3 firefox 
 (root权限才可以降低nice值)
[sudo]kylin的密码:
· kylin@kylin-1:~$top 
(同时使用top命令查看PR和NI值的变化)
例4:修改某个正在执行的程序的nice值。
使用top命令查看到mate-system-monitor(系统监视器)的PID
 是6668,PR值是20,NI值是0
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+COMMAND
6668 kylin 20 0 694448 51076 41240 S 5.6 2.5 7:19.78 mate-system-monitor
使用renice命令修改nice值
kylin@kylin-1:~$sudo renice 10 6668
6668(process ID)old priority 0,new priority 10
再次使用top命令查看PR值和NI值
PID USER PR NI VIRT RES SHR S%CPU%MEM TIME+COMMAND
6668 in 30 10 694448 51076 41240 S 5.3 2.5 10:10.50 mate-system-monitor
 
(5)信号和终止进程
  • 终结进程是我们通常都会碰到的事情。有时,我们可能需要终结某个程序的所有实例。命令行提供了多种用于终结程序的方法。在麒麟操作系统中与进程相关的一个重要概念就是信号。信号是一种进程间通信的机制,它用来中断运行的进程以执行某些操作。终止程序也是通过使用信号技术来实现的。
  • 每一种信号都同一个整数值相关联。当进程接收到一个信号时,它会通过执行对应的信号处理程序(singal handler)来进行响应。在shell脚本中同样可以发送、接收信号,并对其进行处理。KILL就是用于终止进程的信号的命令。像CTRL+C、CTRL+Z这种作业都属于信号。kill命令可用来向进程发送信号,而trap命令用来处理所接收的信号。
 
例4:列出所有可用的信号,打印出信号数(signal number)和信号名称。
  • kylin@kylin-1:~$kill -l
         1)SIGHUP 2)SIGINT 3)SIGQUIT 4)SIGILL 5)SIGTRAP
         中间省略……
         63)SIGRTMAX-1 64)SIGRTMAX
虽然可以指定很多信号,我们经常用到的其实只有少数几个:
用来中止进程时,kill命令的用法:
kill [-s 信号名称] pid [pid2]……
kill [-信号编号]  pid  [pid2]……
例5:终止一个或多个进程。
  • 查看vsftpd和ssh进程的PID
  • kylin@kylin-1:~$ps aux|grep vsftpd
 
root 11844 0.0 0.1 26092 2380?Ss 17:10 0:00/usr/sbin/vsftpd/etc/vsftpd.conf
kylin 11867 0.0 0.0 20888 1092 pts/0 S+17:10 0:00 grep--color=auto vsftpd
  • kylin@kylin-1:~$ps aux|grep sshd
 
root 11794 0.0 0.2 69624 5600?Ss 17:08 0:00/usr/sbin/sshd-D
kylin 11869 0.0 0.0 20888 1032 pts/0 S+17:10 0:00 grep--color=auto sshd
  • 然后杀死这两个进程
  • kylin@kylin-1:~$sudo kill 11844 11794
例6:如果要强行杀死进程,则使用:$kill -s SIGKILL PID或者$kill -9 PID
  • kylin@kylin-1:~$ps aux|grep vsftpd
root 11910 0.0 0.1 26092 2392?Ss 17:14 0:00/usr/sbin/vsftpd/etc/vsftpd.conf
  • kylin@kylin-1:~$sudo kill -s SIGKILL 11910
  • kylin@kylin-1:~$sudo /etc/init.d/vsftpd restart
[ok]Restarting vsftpd(via systemctl):vsftpd.service.
  • kylin@kylin-1:~$ps aux|grep vsftpd
root 11964 0.0 0.1 26092 2376?Ss 17:15 0:00/usr/sbin/vsftpd/etc/vsftpd.conf
  • kylin@kylin-1:~$sudo kill -9 11964


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM