process
运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID、GID、和SELinux语境决定对文件系统的存取和访问权限, 通常从执行进程的用户来继承 存在生命周期 task struct:Linux内核存储进程信息的数据结构格式 task list:多个任务的的task struct组成的链表
进程和线程的区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 2) 线程的划分尺度小于进程,使得多线程程序的并发性高。 3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
进程创建
init:第一个进程 父子关系 进程都由其父进程创建 fork(), clone()
进程优先级
系统优先级:数字越小,优先级越高 0-139: 1-99:实时优先级 100-139:静态优先级 数字越小,优先级越高 nice值:-20到19,对应系统优先级100-139或99 Big O:时间复杂度,用时和规模的关系 O(1), O(logn), O(n), O(n^2), O(2^n)
进程内存
Page Frame:页框,用存储页面数据,存储Page 4k LRU:Least Recently Used 近期最少使用算法,释放内存物理地址空间和线性地址空间 MMU:Memory Management Unit负责转换线性和物理地址
进程之间的通信
我们知道在计算机网络体系当中,主机与主机之间通信,实质上是主机进程与主机进程之间的通信,也就是进程间的通信(IPC.Inter Process Communication). 当两个进程在同一台主机上时:进程间通信科依靠signal(信号指令)、shm(shared memory共享内存空间)、semerphor(旗语,类似飞机起飞时的旗帜语言)来完成。 当两个进程不在同一台主机上时:进程间通信可以依靠rpm(remote procedure call远程过程调用)、socket(套接字)
进程类型
根据进程与系统终端的关系可将进程分为:守护进程和前台进程 守护进程:在系统引导过程中启动的进程,即跟终端无关的进程 前台进程:跟终端相关,通过终端启动的进程,需要注意的是,也可以把前台启动的进程送往后台,以守护模式运行 根据进程占用资源的大小可以将进程分为:CPU密集型和IO密集型 CPU密集型是对cpu占用率高的进程 IO密集型是等待I/O时间长的进程
进程状态
1.Running(运行态):正在运行当中的进程 2.ready:就绪态 3.睡眠态:sleeping 可中断睡眠:interruptable 不可终端睡眠:uninterruptable 4.停止态(Stopped):暂停于内存中,但不会被调度,除非手动启动 5.僵死态(Zombie):孤魂野鬼,找不到归宿,父进程不来收尸或父进程已经挂了
管理进程常用命令
pstree命令
pstree - display a tree of process
ps命令
report a snapshot of the current processes. 三种选项风格: UNIX:必须带- BSD:必须无- GNU:长选项 启动进程的方式: 系统启动过程中自动启动:与终端无关的进程 用户通过终端启动:与终端相关的进程 选项: a:所有与终端相关的进程 x:所有与终端无关的进程 u:以用户为中心组织进程状态信息显示 常用组合之一:aux 每个字段的含义: USE:进程的发起者 PID:进程ID %CPU:进程所占用的CPU百分比 %MEM:进程所占用的内存百分比 VSZ:进程所占用的虚拟内存空间大小 RSS:进程所占用的实际内存空间大小 TTY:此进程运行在哪个终端,pts/n表示远程终端,tty表示本地终端,?表示系统进程 STAT:进程的状态 R:Running态 S:Interruptable,可中断睡眠 D:Uninterruptable,不可终端睡眠 T:Stopped,停止态 Z:Zombie,僵死态 s:Session leader,会话领导者 +:前台进程 l:多线程进程 <:高优先级进程 N:低优先级进程 START:进程的启动时间 TIME:进程实际占用的CPU时间 COMMAND:触发此进程的命令程序 -e:显示所有进程 -f:显示完整格式的进程信息 常用组合之二:-ef 每个字段的含义: UID:进程的发起者 PID:进程ID PPID:父进程的PID C:占用CPU的百分比 STIME:进程的启动时间,从什么时候开始启动的 TTY:进程在哪个终端运行 TIME:进程实际花费的CPU时间 CMD:触发此进程的命令 -F:显示完整格式的进程信息 C:cpu utilization PSR:运行于哪颗CPU -H:以层级结构显示进程的相关信息 常用组合之三:-eFH 常用组合之四:exo 自定义要显示的字段 常用的有pid,ni,ppid,command,pri,psr,pcpu,stat,tty,rtprio,euser,ruser... ni:nice值 pri:priority,优先级 rtprio:real time priority,实时优先级
pgrep命令
look up or signal processes based on name and other attributes pgrep [OPTIONS] pattern -U USER:只显示以指定用户身份运行的进程 -t TERMINAL:与指定的终端相关的进程 -l:显示进程名 -a:显示完整格式的进程名 -P pid:显示此进程的子进程
pkill命令
可以按照进程名称杀死进程 -o:仅向找到的最小(起始)进程号发送信号; -n:仅向找到的最大(结束)进程号发送信号; -P:指定父进程号发送信号; -g:指定进程组; -t:指定开启进程的终端。
pidof命令
根据指定的命令所启动的进程ID pidof PROGRAM
top命令
display Linux processes 常用选项: -d #:指明延迟时长,单位为秒 -b:批次显示 -n #:显示的批次数量 每一行代表的含义为: 第一行: 1.当前的系统时间 2.系统启动到现在所经过的时间 3.当前已经登录到系统的用户 4.系统在1,5,15分钟的平均负载,值越小表示系统越空闲 第二行: 显示的目前进程的总量与个别程序在什么状态(running,sleeping,stopped,zombie)比较需要注意的是最后的zombie的那个数值,如果不是0就需要查看下是哪个进程处于僵尸状态 第三行: 显示的是CPU的整体负载,如果是多核心的cpu,可以按下数字1来切换不同CPU的负载率 us:user space用户空间所占用的CPU百分比 sy:kernel,内核空间所占用的CPU百分比 ni:改变过优先级的进程所占用的CPU百分比 id:空闲CPU百分比 wa:wait io,等待I/O所花费的时间 hi:硬件中断所消耗的百分比 si:软件终端所消耗的百分比 st:被虚拟机偷走的百分比 第四行:表示物理内存空间的使用情况 第五行:表示交换分区的使用情况 子命令: P:以占据CPU百分比排序显示 M:以占据内存百分比排序显示 T:累计占用CPU时间排序显示 l:是否显示负载均衡行 t:是否显示进程摘要信息及CPU负载状态 1:数字1,平均或单独显示CPU的负载状态 m:是否显示内存相关的状态信息 q:退出命令 k:终止指定进程 s:修改延迟时长 top下面的部分: PID:每个进程ID USER:进程所属的使用者 PR:priority简写,进程的优先级,越小优先级越高 NI:nice的简写,与Priority有关,也是越小越早被运行 VIRT:进程需要的虚拟内存大小,而非使用的虚拟内存大小 RES:进程当前使用的内存大小,不把包括swap SHR:进程与其他进程共享的内存大小 S:进程的状态 %CPU:进程所占用的CPU百分比 %MEM:进程所占用的内存百分比 TIME+:CPU使用时间的累加 COMMAND:触发此进程的命令
uptime命令
显示系统时间、运行时长及平均负载 过去1分钟、5分钟和15分钟的平均负载 等待运行的进程队列的长度
htop命令
top升级版,默认情况下没有安装,需要配置EPEL源来进行安装 支持的选项: -d #:延迟时长 -u USERNAME:仅显示指定用户的进程 -s COLUMN:根据指定的字段进程排序 子命令: l:显示光标所在进程所打开的文件列表 s:显示贯标所在进程执行的系统调用 a:绑定进程到指定的CPU #:快速定位光标至PID为#的进程上
vmstat命令
Report virtual memory statistics vmstat [options] [delay [count]] procs:进程相关 r:等待运行的进程个数;队列长度 b:处理不可中断睡眠状态的进程的个数 memory:内存相关 swpd:交换内存使用量 free:物理内存空间使用量 buffer:用于buffer的内存总量 cache:用于cache的内存总量 swap:交换分区相关 si:数据进入swap的速率(kb/s) so:数据离开swap的速率(kb/s) io:I/O相关 bi:从设备读入数据到系统的速率(kb/s) bo:保存数据至块设备的速率(kb/s) system: in:中断速率,每秒被中断的次数 cs:进程切换的速率 cpu: us:user space用户运行程序占用CPU的百分比 sy:system用于运行内核占用CPU的百分比 id:idle空闲CPU百分比 wa:wait I/O花费时间 st:被虚拟机偷走的百分比 常用选项: -s:显示内存的统计数据
pmap
进程对应的内存映射 pmap [OPTIONS] pid [...] -x:显示详细格式 示例:pmap 1 另一种实现方式: cat /proc/PID/maps
系统监控工具
glances
A cross-platform curses-based monitoring tool 需要EPEL源 常用选项: -b:以Byte为单位显示网络数据速率 -d:关闭磁盘I/O模块 -m:关闭mount模块 -n:关闭network模块 -t #:刷新时间间隔 -1:每个cpu的相关数据单独显示 -o {HTML|CSV}:输出格式 -f /PATH/TO/SOMEDIR:设定输出文件的位置 C/S模式下运行glances命令: 服务模式: glances -s -B IPADDR IPADDR:本机的某地址,用于监听 客户端模式: glances -c IPADDR IPADDR:是远程服务器的地址
dstat命令
versatile tool for generating system resource statistics dstat [-afv] [options..] [delay [count]] 常用选项: -c, --cpu:显示cpu相关信息 -C#,#,...,total -d, --disk:显示磁盘的相关信息 -D sda,sdb,...,total -g:显示page相关的速率数据 -m:Memory的相关统计数据 -n:Interface的相关统计数据 -p:显示process的相关统计数据 -r:显示io请求的相关的统计数据 -s:显示swapped的相关统计数据 --tcp:显示tcp套接字的相关数据 --udp:显示udp套接字的相关数据 --raw:显示raw套接字的相关数据 --socket: --ipc:显示进程间通信相关的速率数据 --top-cpu:显示最占用CPU的进程 --top-io:最占用io的进程 --top-mem:最占用内存的进程 --top-lantency:延迟最大的进程
管理进程
kill命令
terminate a process 用于向进程发送信号,以实现对进程的管理 显示当前系统可用信号: kill -l 每个信号的表示方法有三种: 1)信号的数字标识 2)信号完整名称 3)信号的简写名称 向进程发信号: kill [-s signal|-p] [-q sigval] [-a] [--] pid... 常用信号: 1)SIGHUP:无需关闭进程让其重读配置文件 2)SIGINT:终止正在运行的进程,相当于Ctrl+c 9)SIGKILL:强行杀死所指定的进程 15)SIGTERM:终止一个进程,默认kill命令不跟选项则使用此选项 18)SIGOUT:继续运行进程 19)SIGSTOP:暂停进程,把进程放置于后台,相当于Ctrl+z
killall
终止一个进程 killall [-SIGNAL] program
作业管理
jobs命令
查看当前系统作业 -l:显示进程ID 前台作业(foregroud):通过终端启动,且启动后会一直占据终端 后台作业(backgroud):可以通过终端启动,但启动后即转入后台运行(释放终端) 如何让作业运行于后台? (1)运行中的作业 Ctrl+z 注意:送往后台后,作业会转为停止态 (2)尚未启动的作业 # COMMAND & 注意:此类作业虽然被送往后台,但其依然与终端相关;如果终端终止,与终端相关的进程将被终止; 如果希望把送往后台的作业剥离与终端的关系 # nohup COMMAND & 可实现作业控制的常用命令: fg [[%]JOB_NUM]:把后台作业调回前台 bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行 kill %JOB_NUM:终止指定的作业
调整进程优先级
可通过nice值调整的优先级范围:100-139 分别对应于:-20, 19 进程启动时,其nice值默认为0,其优先级为120 nice命令: 以指定的nice值启动并运行命令 nice [OPTION] [COMMAND [ARGU]...] 选项: -n NICE 注意:只有管理员才可调低nice值 renice命令: renice [-n] NICE PID... 查看Nice值和优先级: ps axo pid,ni,priority,command | grep COMMAND
原创文章,作者:zhai796898,如若转载,请注明出处:http://www.178linux.com/45036