目录
服务和进程
01. 进程和服务的概述
-
程序是一组静态指令的集合
-
进程是一个程序动态的执行过程,是资源申请、调度和独立运行单位。当程序加载到内存中运行时,内存中的那个数据就称为进程
-
在麒麟操作系统中,程序通过用户的执行来触发,触发任何一个事件时,系统都会将它定义为一个进程。为了能够管理这个进程,操作系统会给与这个进程一个PID,同时根据触发这个进程的用户和相关属性关系,给与这个PID一组有效的权限设置
-
进程的类型
根据进程的特点,把进程分为以下三类:
-
交互进程
由shell启动的进程,它既可以在前台运行,也可以在后台运行,交互进程在执行过程中,要求与用户进行交互操作。简单来说就是用户需要给出某些参数或者信息,进程才能继续执行
-
批处理进程
与windows原来的批处理很类似,是一个进程序列,该进程负责按照顺序启动其他进程
-
守护进程
是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,知道系统关闭时才停止运行,而某些守护进程只是在需要时才会启动,比如FTP或者Apache服务等,可以在需要的时候才启动该服务
根据进程状态的不同,又可以把进程分为另外三类:
-
守护进程
(补充)所有守护进程都是可以超级用户(用户ID为0)的优先权运行;守护进程没有控制终端;守护进程的父进程都是init进程(即1号进程)
-
孤儿进程
一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被init进程手痒,并由init进程对它们完成状态收集工作
-
僵尸进程
一个子进程结束但是没有完全释放内存(在内核中的task_struct没有释放),该进程就成为将是进程。当僵尸进程的父进程结束后该僵尸进程就会被init进程所收养,最终被回收。僵尸进程会导致资源的浪费,而孤儿进程不会。
进程的执行状态
进程不会因为存在就会自动获取CPU时间的资格。进程最基本的4中状态如下:
-
Runnable(可运行状态),进程可以被执行
处于可执行状态的进程,代表它获得了需要的全部资源,只等CPU有时间就可以马上执行,一旦进程执行了一个不能立即完成的系统调用,那么这个进程将转入睡眠状态,等待资源
-
Sleeping(睡眠状态),进程正在等待某些资源
睡眠状态的进程,被阻塞,等待资源以唤醒,也可以通过其他进程信号或时钟中断唤醒,进入可运行队列。有一种深度睡眠状态不可被其他进程信号或时钟中断唤醒
-
Zombie(僵化状态),进程试图消亡
僵化状态的进程,其父进程还没有询问子进程状态时,子进程就已经停止了,称该进程处于僵死状态,资源未释放。为了让父进程能够获取其停止运行的信息,此时子进程的任务数据结构信息还需要保留
-
Stopped(停止状态),进程被挂起(不允许执行)
停止状态的进程,当进程收到相应的信号就会进入暂停状态
02. 进程管理
图形管理
-
点击开始菜单->系统监视器(或在桌面任务栏上邮件选择系统监视器)。如下图,可以看到进程的状态、CPU占用率、优先级、PID、占用内存大小等信息
-
点击菜单栏的查看,可以查看全部进程、活动进程、当前用户的进程等信息
命令管理
-
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等
-
ps选项
-
a:显示统一终端机器下的所有程序,包括其他用户的程序
-
u:以用户为主的格式来显示程序状况
-
x:显示所有程序,不以终端机来区分
-
-
ps aux选项说明
-
USER:说明该程序是属于哪个用户的
-
PID:该程序的代号
-
%CPU:该程序使用了多少CPU资源
-
%MEM:该程序使用了多少RAM
-
VSZ,RSS:占去的ram的大小(bytes)
-
TTY:是否为登入者执行的程序?若tty1-6则为本机登入者,pts/??则为远程登入者执行的命令
-
STAT:该程序的状态, (R)可执行,(S)睡眠中,就是没有执行了(T)正在侦测或者是停止了(Z)僵尸程序,就是zombie撕掉的程序
-
START:该程序开始的日期
-
TIME:该程序跑了多长时间
-
COMMAND:该程序的内容
-
进程状态
- D:不可中断的休眠,不能中止此进程
- R:可运行的进程
- S:处于休眠状态
- T:停止或被追踪,进程已被暂停
- X:死掉的进程
- Z:僵尸进程
- <:优先级高的进程
- N:优先级较低的进程
- L:有些页被锁进内存
- s:进程的领导者,在它之下有子进程
- +:位于后台的进程组
-
pstree -p:pstree以树状图的方式展现进程之间的派生关系,显示效果比较直观
查看进程的实时信息
- top命令可以实时动态的查看系统的整体运行状况,是一个综合了多方信息检测系统性能和运行信息的实用工具。通过top命令提供的互动式界面,用热键可以管理
- top选项:
- -c:显示完整的命令
- -d:屏幕刷新间隔时间
- -p <进程号>:指定进程
- -n <次数>:循环显示的次数
- top的交互命令,在终端输入top后,再在终端输入交互选项
| 选项 | 说明 |
| ---- | ------------------------------------------------------------ |
| q | 退出程序 |
| k | 终止一个进程 |
| s | 改变两次刷新之间的延迟时间(单位是s,如果有小数,就换算成ms。输入0则系统不断刷新,默认值是3s) |
| m | 切换显示内存信息 |
| t | 切换显示进程和CPU状态信息 |
| c | 切换显示命令名称和完成命令行 |
| M | 根据驻留内存大小进行排序 |
| P | 根据CPU使用百分比大小进行排序 |
- 对top命令结果的解释
- top - 15:58:12 [当前系统时间]
- up 2:30 [系统已经运行了两个半小时]
- 2 users [2个用户当前登录]
- load average:0.08,0.02,0.01[系统负载,即任务队列的平均长度]
- Tasks:200 total[总进程数]
- 1 running[正在运行的进程数]
- 1 sleeping[睡眠的进程数]
- 0 stopped[停止的进程数]
- 1 zombie[僵化进程数]
- %Cpu(s):8.1%us[用户空间占用CPU百分比]
- 4.8%sy[内核空间占用CPU百分比]
- KiB Mem:2028480 total[物理内存总量]
- 123123 used[使用的物理内存总量]
- 123123 free[空闲内存总量]
- 123123 buffers[用作内核缓存的内存量]
- PID:进程ID,进程的唯一标识符
- USER:进程所有者的实际用户名
- PR:进程的调度优先级,这个字段一些值是rt,这意味着这些进程运行在实时态
- NI:进程的nice值(优先级)。越小的值意味着越高的优先级,负值表示高优先级,正值表示低优先级
- S:这个是进程的状态,它有以下不同的值:
- D 不可中断的睡眠态
- R 运行态
- S 睡眠态
- T 被跟踪或已停止
- Z 僵尸态
进程的优先级和执行顺序
- 进程cpu资源分配就是指进程的优先权,优先权高的进程有优先执行权力。配置进程优先权对多任务环境的麒麟系统很有用,可以改善系统性能。还可以把进程运行到指定的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 就是后面权限数值
- renice命令就是设置一个已经再运行的进程的nice值
- renice [number] PID
信号与终止进程
- 终结进程是我们通常都会碰到的事情。有时,我们可能需要终结某个程序的所有实例。命令行提供了多种用于终结程序的方法。在麒麟操作系统中与进程相关的一个重要概念就是信号,信号是一种进程间的通信机制,它用来中断运行的进程以执行某些操作。终止程序也是通过使用信号技术来实现的。
- 每一种信号都同一个整数值相关联。当进程接收到一个信号时,他会通过执行对应的信号处理程序(signal handler)来响应。在shell脚本中同样可以发送、接收信号,并对其进行处理。kill就是用于终止进程的信号的命令。像Ctrl C、Ctrl Z这种作业都属于信号。kill命令可用来向进程发送信号,而trap命令则用来处理所接受的信号
- kill -l:列出所有可用的信号,打印出信号数(signal number)和信号名称
- 虽然可以指定很多信号,我们进场用到的其实只有少数几个
- SIGHUP 1 对控制进程或终端进行挂起检测(hangup detection)
- SIGINT 2 当按下ctrl c时发送信号
- SIGKILL 9 用于强行杀死进程
- SIGTERM 15 默认用于终止进程
- SIGTSTO 20 当按下ctrl z发送该信号
- 用来终止进程时,kill 命令的用法
- kill [-s 信号名称] pid [pid2 ...]
- kill [-信号编号] pid [pid2 ...]
03. 服务管理
长期运行在内存中的进程,且可以提供一些系统或网络功能,称为服务。
服务本质就是进程,但是是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如mysql、sshd等,因此我们又称之为守护进程(daemon)
按照服务安装方式,服务又可以分为两种:
-
使用rpm安装包安装的服务,服务的安装位置按照rpm设置好的目录。rpm包启动的服务通常会加入到系统服务目录中,通过service、systemctl等配合参数可以启动(如:systemctl start mysqld)
-
使用源码包编译安装的服务:可以手动指定安装目录,源码包安装的服务默认需要用启动脚本文件的绝对路径配合参数来启动,如/usr/local/nginx/sbin/nginx start
服务的运行状态如下:
-
active (running) 运行中,正在运行中
-
inactive (dead) 停止状态,等待启动
在麒麟操作系统上可以通过三中方式管理服务:
-
/etc/init.d/ 直接在对目录下的服务脚本进行管理
-
service 调用/etc/init.d/目录下的服务脚本管理服务
-
systemctl 是systemd对应的服务管理命令
例:
-
/etc/init.d/ssh status
-
service sshd status
-
systemctl status sshd
启动start、状态status、停止stop、重启restart
重载服务的配置文件:systemctl reload sshd 需要在服务启动状态执行
是否开机自启动:is-enabled,开机自启动开启:enable,关闭:disable
程序通常是静态的物理文件,而进程是一个正在运行的程序
服务是常住于内存的一类特殊进程,通常负责提供系统功能以服务各项任务