目录
查看进程
程序
保存在硬盘、光盘等介质中的可执行代码和数据
静态保存的代码(二进制文件)
进程
在CPU及内存中运行的代码程序
动态执行的代码
父、子进程
每个程序可以创建一个或多个进程
区别
程序是静态的,进程是动态的。
进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为一个独立单位得到操作系统的认可。
一个程序可以对应多个进程,但一个进程只能对应一个程序。
进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成,而程序是一组有序的指令集合。
扩充
线程
线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
查看进程信息ps
定义
查看静态的进程统计信息
格式
[root@localhost ~]# ps aux
常用的参数
- a:显示当前终端下的所有进程信息,包括其他用户的进程。与“x”选项结合时将显示系统中所有的进程信息。
-u::使用以用户为主的格式输出进程信息。
-x: 显示当前用户在所有终端下的进程信息。
常用的选项组合
ps -aux #将以简单列表的形式显示出进程信
上述输出信息中,第一行为列表标题,其中各字段的含义描述如下。
USER:启动该进程的用户账号的名称。
PID:该进程在系统中的数字ID号,在当前系统中是唯一-的。
%CPU:CPU占用的百分比。
%MEM:内存占用的百分比。
VSZ:该进程使用的虚拟内存量(KB)。
RSS:该进程占用的物理内存(实际内存)量(KB)。
TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。
简说:pts 是远程登录终端ctrl+ALT F1-F6 tty1: 图像界面 2和6:字符界面系统本身自身执行的进程。
示例
STAT:该进程的状态(D:不可中断的休眠状态:R:正在运行状态:s:处于休眠状态,可被唤醒;T:停止状态,可能是在后台暂停或进程处于跟踪调试状态。 Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
D:系统守护进程
T:调式、程序执行一-般停止
R:该程序目前正在运作,或者是可被运作;
s:该程序目前正在睡眠当中(可说是idle状态啦!),但可被某些讯号(signal)唤醒
T:该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie (疆尸)程序的状态D不可中断状态。
STAT的含意如下:
<:表示进程运行在高优先级上
N:表示进程运行在低优先级上
L:表示进程有页面锁定在内存中
s:表示进程是控制进程
l:表示进程是多线程的
+:表示当前进程运行在前台
D:系统守护进程
T:调式、程序执行一般停止
START:启动该进程的时间。
TIME:该进程占用的CPU时间。
COMMAND:启动该进程的命令的名称
查看状态
Ctrl+Z 停止
再进行查看
然后干掉进程
删掉隐藏文件
压缩
查看详细信息
另一种方式查看
示例
查看进程状态[root@benet ~] # vim a.txt 在另一个终端执行:
[ root@benet ~]# ps -aux|grep a.txt #查看状态 s表示睡眠状态,+表示前台
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto a.txt
在 vim a.txt 这个终端上按下:ctrl+z [1]+ 已停止 vim a.txt 在另一个终端执行:
[ root@benet ~]# ps -aux | grep a.txt #查看状态T表示停止状态
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+2 1:05 0:00 grep --color=auto a.txt
注:
ctrl-c 是发送SIGINT 信号,终止一个进程
ctrl-z 是发送SIGsTOP信号,挂起一个进程。将作业放置到后台(暂停)
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EoF。代表输入完成或者注销
例2: D 不可中断状态
[ root@xuegod63.~]# tar -zcvf usr-tar.gz /usr/
#然后在另一个终端不断查看状态,由S+,R+变为D+
方法二
ps -elf #将以长格式显示系统中的进程信.息
-e:是示系统内的所有进程信息.。
-l:使用长格式显示i进程信息。
-f:使用完整的格式显示进程信息。
查看进程信息ps
定义
查看静态的进程统计信息
[root@localhost ~]# ps -elf
F:内核分配给进程的系统标记。
S:进程的状态。
UID:启动这些进程的用户。
PID:进程的ID号。
PPID:父进程的进程ID号。
C:进程生命周期中的CPU利用率。
PRI:进程的优先级(越大的数字代表越低的优先级)。
NI:谦让度值,用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如基础被换出,所需进程大致的交换空间的大小。
WCHAN:假如该进程在睡眠,则显示睡眠中的系统函数名。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间 pts/0255代表虚拟终端,一般是远程连接的终端; tty1tty7代表本地控制台终端。
CMD:进程的启动命令。
僵尸进程:
一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程,因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init来接管它,成为它的父进程,子进程退出后init会回收其占用的相关资源。但是当了进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
进程状态。常见的状态有以下几种:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从2.6内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在BSD格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写L) 。
-+:位于后台。
-C:进程占用cPU的百分比
示例
先加载http命令
启动系统服务
查看服务存不存在
查看进程信息top
作用
查看动态的进程排名信息
查看是否有大量的数据占用cpu和内存
格式
[root@localhost ~]# top
示例
上述输出信息中,开头的部分显示了系统任务(Tasks) 、cPu占用、内存占用(Mem)、交换空间(Swap)等汇总信息,汇总信息下方依次显示当前进程的排名情况。相关信息的含义表述如下。
uptime
13:22:30 当前时间
up 20days 系统运行时间, 说明此服务器连续运行20天了
user 当前登录用户数
load average: 0:06,0:60,0:48 系统负载,即任务队列的平均长度。三个数值分别为1分钟、5分钟、15分钟前到现在的平均值。
系统任务(Tasks)信息:total,总进程数:running,正在运行的进程数: sleeping,休眠的进程数::stopped,中止的进程数:zombie:僵死无响应的进程数。
CPU占用信息:us:用户占用,sy:内核占用,ni:优先级调度占用, id:空闲CPU, wa:I/O
等待占用:hi:硬件中断占用,si:软件中断占用,st:虚拟化占用。要了解空闲的 CPU百分比,主要看sid部分。
内存占用(Mem〉信息:total:总内存空间,free:空闲内存,used:已用内存, buff/cache:物理内存和交换内存的缓冲区总和。
交换空间(Swap)占用: total:总交换空间,free:空闲交换空间, used:已用交换空间: availMem:可用物理空间。
0.0%hi (了解) 硬件中断消耗时间 硬件中断占用
硬中断,占的cPU百分比。
1,硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ (中新请求)。基于IRO,CPU
可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程') 。# hi ->
Hardware IRQ:The amount of time the CPU has been servicing hardware interrupts.
0.08 si(了解) 软中断消耗时间 软件中断占用
软中断,占的 CPU百分比。1.通常,软中断是一些对I/o 的请求。这些请求会调用内核中可以调度I/0发生的程序。对于某些设备,I/o 请求需要被立即处理,而磁盘I/O
请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。1/o可以在进程之间产生并且调度过程通常和磁盘I/o的方式是相同。# si -> Software Interrupts: The amount of time the CPU has been servicingsoftware interrupts.
0.0 st (steal 偷) 虚拟化占用。要了解空闲的 CPU百分比,主要看%id部分。
st:虚拟机偷取物理的时间。比如:物理机已经运行了KVWM,XEN虚拟机。KWM虚拟机占用物理机的 CPU时间
Mem:2033552k total 物理内存总量
340392k used 使用的物理内存总量
1376636k free 空闲内存总量
316524k buff/cache 用作内核缓存的内存量。 和 free -k 一个意思
swap: 2017948k total 空闲交换区总量
ok used 使用的交换区总量
192772k free 空闲交换[区总量
1518148 avail Mem 总的可利用内存是多少
top:显示当前系统的时间
up:系统运行的时间
users:用户数量
load average:当前系统的负载情况 后面三个数代表了 一分钟,五分钟,十五分钟到现在的一个平均值。
Tasks:进程的总数
running:正在运行的进程数
sleeping:正在睡眠的进程数
stopped:停止运行的进程数
zombie:僵尸进程数
%CPU:us 占用信息 sy 用户的占用信息,内核的占用信息 ni 优先级的调整
id 空闲的CPU百分比 wa I/O hi 硬件中断的占用 si 内核占用
st 虚拟化的内存占用
KiB Mem:内存信息 (总的内存 空闲内存 已使用内存 物理内存和交换内存的缓存)
KiB Swap:交换空间 (总的交换空间 空闲交换空间 已使用交换空间 物理内存和内存缓存)
PID:运行的进程
USER:用户名
PR:优先级
NI:进程优先级
VIRT:虚拟内存
RES:进程所使用的物理内存 (实际内存为RESS)
SHR:共享内存的大小
S:进程状态 D=不可中断的睡眠状态 R=运行中或可运行(S=睡眠中) T=已跟踪/已停止z=僵停
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程使用的物理内存百分比
TIME+:进程使用的CPU时间总计
COMMAND:命令名/命令行
查看内存空间(空间不足可能会造成僵尸进程)
查看进程信息pgrep
作用
根据特定的条件查询进程PID信息
示例
[root@localhost ~]# pgrep -l "log" -l:显示进程名
2538 rsyslogd
2113 mcelog
[root@localhost ~]# pgrep -l -U teacher -t tty1
27483 bash
27584 vim
-U:指定特定用户
-t:指定终端
常用的参数
-l:选项可同时输出对应的进程名以及PID-u:选项查询特定用户的进程
-t:选项查询在特定终端运行的进程
例1
pgrep -l "log"
例2
pgrep -l -0 teacher -t ttyl
查看进程信息pstree
作用
以树形结构列出进程信息
格式
[root@localhost ~]# pstree -aup
init,1
....//省略部分信息
l—login,3221
l—bash,27483,teacher
l—vim,27674 myfile.txt......川省略部分信息
[root@localhost~]# pstree -ap teacher
bash,27483
l—vim,27674 myfile.txt
pstree命令默认情况下只显示各进程的名称,结合以下常用的参数使用:
-p:选项使用时可以同时列出对应的PID号
-u:选项可以列出对应的用户名
-a:选项可以列出完整的命令信息
执行如下的"pstree -aup"命令可以查看当前系统的进程树,包括各进程对应的PID号、用户名、完整命令等信息。从输出结果中可以看出,systemd进程确实是 Linux操作系统中所有进程的”始祖”
例1
pstree -aup hmj
实例
创建一个用户
在另一边登入他的账号进入编辑器
随便写点什么
以树形的方式进行查看
进程的启动方式
手工启动
前台启动
用户输入命令,直接执行程序
后台启动
在命令行尾加入“&"符号
[root@localhost ~]# cp /dev/cdrom mycd.iso &
[1]28454 输出信息中包括后台任务序号、PID号
进行挂载并查看
进行后台运行
查看后台运行的进程
杀死程序并查看(一定要在进程完成前杀死,不然没用)
调度启动
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务
进程的前后台调度
Ctrl+Z组合键
将当前进程挂起,即调入后台并停止执行
jobs命令
查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
[root@localhost ~]# jobs
[1]- Stopped cp /devlcdrom mycd.iso
[2]+ Stopped top
[root@localhost ~]# fg 1
bg命令
终止进程的运行
Ctrl+C组合键
中断正在执行的命令
kill、killall命令
kill用于终止指定PID号的进程
killall用于终止指定名称的所有进程
-9选项用于强制终止
示例
查看所有httpd
删除19101
再次查看
终止进程执行
当用户在前台执行某个进程时,可以按ctrl+c组合键强制进行中断(如命令长时间没有响应的情况下) 。中断前台进程的运行后,系统将返回命令行提示符状态等待用户输入新的命令。当按ctrl+C
组合键无法终止程序或者需要结束在其他终端或后台运行的进程时,可以使用专用的进程终止工具kiii、 killall 和pkili。
使用kill 命令终止进程
通过kill 命令终止进程时,需要使用进程的PID号作为参数。无特定选项时,kill命令将给该进程发送终止信号并正常退出运行,若该进程已经无法响应终止信号,则可以结合"-9”选项强行终止进程。强制终止进程时可能会导致程序运行的部分数据丢失,因此不到不得已时不要轻易使用"-9"选项。
例如,若 SSH 服务的 sshd 进程的PID号为 5822,则执行"kill 5822"命令后可以将进程sshd终止:
[ root@localhost ~]# pgrep -l "sshd"//查询日标进程的PID号
5822 sshd
[ root@localhost ~]# kill 5822//终止指定PID的进程
[ root@localhost ~j# pgrep -l "sshd"//确认进程已终止(查询时无结果)
对于无法正常终止的系统进程,在必要时可以结合"-9"选项强制终止。例如,以下操作展示了强制终止 vim进程的过程为弄出
[ root@localhost ~ ] # vim testfile & //打开vim程序并挂起作为测试
[ 1]+ stopped vim testfile
[ root@localhost ~]# jobs -l //查询目标进程的PID号
[ 1]+ 7095 stopped vim testfile
使用killall 命令终止进程
使用killall命令可以通过进程名称来终止进程,当需要结束系统中多个相同名称的进程时,使用 killall命令将更加方便,效率更高。killall命令同样也有"-9"选项。例如,执行如下的"killall -9
vim命令町将所有名为virm 的进程都强行终止。
[ root@localhost ~ ] # vim testfile1 & //挂起第1个vim 测试进程
[ 1]+stopped vim testfile1
[ root@localhost ~]# vim testfile2 & //挂起第2个vim测试进程
[ 2]+stopped vim testfile2
[ rootelocalhost ~]# jobs -l //确认待终止的进程信息 [1]- 7144 Stopped vim testfile"
[ 2]+ 7153 stopped vim testfile2
[ root@localhost~ ] # killall -9 vim //通过进程名终止多个进程
[ root@localhost ~]# jobs -l
[ 1]- 7144 Killedvim testfile1
[ 2]+ 7153 Killedvim testfile2
扩充
使用pki1l 命令终止进程 使用pkill
命令可以根据进程的名称、运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep命令基本类似,如"-[J"”(指定用户)、"-t”(指定终端)等选项,使用起来非常方便。例如,若要终止由用户 hmj启动的进程〈包括登录 shell),可以执行以下操作。su- hnj
vim tst.txt &
[ rootelocalhost ~] #pgrep -l -U "hmj" //确认目标进程相关信息3773 bash
[rootelocalhost ~] #pkill -9 -u "hmj" //强行终止用广hackli 的进程
[root@localhost ~]# pgrep -l -u "hmj" //确认目标进程己被终止