进程与管理

贵有恒,何必三更起、五更眠、最无益,只怕一日曝、十日寒。这篇文章主要讲述进程与管理相关的知识,希望能为你提供帮助。
1、程序
  a、保存在硬盘、光盘等个质中的可执行代码和数据
  b、文件中静态保存的代码
2、程序和进程的关系  a、在CPU及内存中运行的程序代码就是进程
  b、动态执行的代码
  c、父、子进程
  d、每个程序可以创建一个或多个进程
2、进程
1、进程的概念进程最根本的属性是动态性和并发性。以下是从不同角度对进程的解释:
a、进程是程序的一次执行
b、进程是可以与其他计算并发执行的计算
c、进程是一个程序程序及其数据在处理器上顺序执行时发生的活动
d、进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位
e、进程是进程实体的一次活动
f、进程是支持程序运行的机制
2、进程的定义进程是具有一定功能的程序在一个数据结合上的运行过程,它是系统进行资源分配和调度管理的一个可并发执行的基本单位。
3、进程的基本特性a、动态性:进程的实质是程序的一次执行过程,它由系统创建而产生,能够被调度而执行,因申请的共享资源被其他进程占用而暂停,完成任务后被撤销。动态性是进程最重要的特性。
b、独立性:系统内多个进程可以并发执行,引入进程的目的也是为了使系统某个程序能够和其他进程并发执行。
c、异步性:进程由于共享资源和协同合作,因此产生了相互制约的关系,进程实体通过进程管理以异步的方式使用处理器和其他资源,系统必须统一调度,依据一定的算法来保证各个进程能够协同运行并共享处理器和其他资源。
d、结构特性:系统中运行的进程实体通常由程序、数据和一个PCB(进程控制块)组成。
4、进程的基本状态和转换进程是操作系统实现并发执行的重要手段,也是操作系统为程序提供的重要运行环境抽象。
3、线程
1、线程的概念线程是进程中实施调度和分派的基本单位。
操作系统提供现成的目的就是为了方便高效地实现并发处理(进一步提高并发度)。
2、线程分类线程一般分为用户级线程和核心级线程。
3、线程池设计思想:在创建一个进程是,相应地创建若干个线程,将它们放在一个缓冲池中,这些线程在等待工作。当服务器接收到一个请求时,系统就唤醒其中的一个线程,并将请求传给它,由这个线程进行服务。当完成任务后,线程重新被放入线程池中,等待下面新的请求和服务。如果线程池中没有可用的线程,服务器就要等待,直到有一个线程被释放。
4、线程和进程的关系1、一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。
2、资源分配给进程,同一个进程的所有线程共享该进程所有资源。
3、CPU分配给线程,即真正在处理器运行的是线程。
4、线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。


注:进程是最基本的资源拥有单位和调度单位。
进程间通信方式:(1)消息传递(2)共享存储(3)管道通信


4、查看进程信息常用命令
1、查看进程信息ps ps命令 可以查看静态的进程统计信息
方法一:
格式:ps aux
a:显示终端上的所有进程,包括其它用户的进程。
u: 表示列出进程的用户。
x:显示所有终端的进程。

各列的解释:
USER:进程的用户。
PID:进程的ID。
%CPU:进程占用的CPU百分比。
%MEM:占用内存的百分比。
VSZ:该进程使用的虚拟内存量(KB) 。
RSS:该进程占用的物理内存量(KB)
TTY:启动进程的终端名。不是从终端启动的进程则显示为?
STAT:该进程的状态(D:不可中断的休眠状态: R:正在运行状态: S: 处于休眠状态,可被唤醒; T:停止状态,可能是在后台暂停或进程处于跟踪
调试状态: Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
START:该进程被触发启动时间。
TIME:该进程实际使用cPu运行的时间。
COMMAND:进程的启动命令。




方法二:
格式:ps -elf  
-e:显示系统内的所有进程信息。
-1:使用长格式显示进程信息。
-f:使用完整的格式显示进程信息。
-a:显示所有进程pid.
-T:查看线程信息。


ps -aT 显示所有线程




各列的解释:
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID: 进程的进程ID。
PPID:父进程的进程号( 如果该进程是由另一个进程启动的)。
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:进程的启动命令。


僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。
但是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。


2、top命令   查看动态的进程统计信息

第一行是任务队列信息
11:06:48   系统时间
up 1:22   系统已运行时长!
1user     当前登录用户数
load average: 0.00, 0.03, 0.05 系统负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值


第二行为进程信息
Tasks       总进程数
running     正在运行的进程数
sleeping     休眠的进程数
stopped     中止的进程数
zombie       僵死的进程数


第三行为CPU的信息
us   用户占用
sy   内核占用
ni   优先级调度占用
id   空闲CPU,要了解空闲的CPU百分比,主要看8id部分
wa     I/O等待占用
hi   硬件中断占用
si   软件中断占用
st     虚拟化占用


第四行为内存的信息
total 总内存空间.
free   空闲内存
used   已用内存
buff/cache物理内存和交换内存的缓冲区总和


第五行
total:总交换空间
free:空闲交换空间
userd:已用交换空间
avail Mem:可用物理空间

进程信息区各列解释:

PID
进程id
USER
进程所有者的用户名
PR
优先级
NI
谦让度值。复制表示高优先级,正值表示低优先级
VIRT
进程使用的虚拟内存大小,单位kb
RES
进程使用的物理内存大小,单位kb
SHR
共享内存大小,单位kb
S
进程状态
%CPU
上次更新到现在的CPU时间占用百分比
%MEM
进程使用的物理内存百分比
TIME+
进程使用的CPU时间总计,单位1/100秒
COMMAND
命令名/命令行





top常用命令:
P键:根据CPU使用百分比大小进行排序

M键:根据驻留内存大小进行排序



N键:根据启动时间进行排序
c键:切换显示命令名称和完整命令行

h键:可以获得top程序的在线帮助信息

k键:根据提示输入指定进程的PID号并按Enter 键终止对应的进程

q键:退出top程序
数字1键:显示CPU个数和状态
top -H: 显示所有线程
top -H -P < pid> : 显示特定进程中的线程


注*:w、top、uptime 三个命令可以查看load average信息


3、pgrep命令根据特定条件查询进程PID信息
格式:pgrep   进程名




-l:显示进程名。缺省时只输出PID号
-u:指定特定用户
-t 指定终端


4、pstree命令以树形结构列出进程信息

-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
-ap:只查看属于指定用户、的进程树结构



5、进程启动方式
1、手工启动。  前台启动:用户输入命令,直接执行程序
  后台启动:在命令行尾加入“& ”符号




2、调度启动  使用at命令,设置一次性计划任务
  使用crontab命令,设置周期性计划任务


进程的前后台调度
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行


3、jobs命令jobs -l
查看处于后台的任务列表



4、fg命令将后台进程恢复到前台运行,可指定任务序号
格式:fg 后台进程序号


6、终止进程的运行
Ctrl+C组合键
  中断正在执行的命令
 
1、kill、 killall命令   kill用于终止指定PID号的进程
  killall用于终止指定名称相关的所有进程
  -9选项用于强制终止(慎用)






2、pkill命令【进程与管理】 ●根据特定条件终止相应的进程
●常用命令选项
  ◆-U:根据进程所属的用户名终止相应进程
  ◆-t:根据进程所在的终端终止相应进程


7、计划任务管理
1、at命令●一次性计划任务
at [HH:MM] [yyyy-mm-dd]
按Ctrl+D提交任务


示例:

●在当天的21:30时自动关闭当前系统
at 21:30 代表当天
atq:查看未执行的任务列表
atrm 任务序号:删除任务



2、crontab命令按照预先设置的时间周期(分钟、小时、天、月、周)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
  全局配置文件,位于文件: /etc/crontab
  系统默认的设置,位于目录: /etc/cron.*/
  用户定义的设置,位于文件: /var/spool/cron/用户名


管理crontab计划任务
编辑计划任务
  crontab -e [-u 用户名]     -u缺省时默认是针对当前用户
  vim /var/spool/cron/root

  echo ‘1 1 1 1 * ls -l /opt’ > > /var/spool/cron/root
  vim /etc/crontab   格式:* * * * * 用户名 命令
 



查看计划任务
  crontab -l [-u 用户名]
删除计划任务
  crontab -r [-u 用户名]

crontab 任务配置的格式:
50(分) 3(时) 2(日) 1(月) *(周)  run conmnd(命令)


字段       说明
分钟       取值为从0到59之间的任意整数
小时       取值为从0到23之间的任意整数
日期       取值为从1到31之间的任意整数
月份       取值为从1到12之间的任意整数
星期       取值为从0到7之间的任意整数,0或7代表星期日
命令       要执行的命令或程序脚本




时间数值的特殊表示方法
●*表示该范围内的任意时间
● ,表示间隔的多个不连续时间点
●-表示一个连续的时间范围
●/指定间隔的时间频率


应用示例  
●0 17 * * 1-5     周一到周五每天17:00
●30 8 * * 1,3,5   每周一、三、五的8点30分
●0 8-18/2 * * *   8点到18点之间每2小时
●0 * */3 * * *     每3天每小时零分


每三个月的5,15,25号晚上十点半执行复制Var/log/messages文件到/opt目录中命令
30 22 5,15,25 */3 * cp /var/log/messages /opt/
每周六日的早八点到晚八点每半小时执行删除/tmp/system.log 命令

    推荐阅读