1、什么是进程
fork机制:
进程身份: 对于一个进程而言,也有一个身份,是谁在执行这个可执行文件 #打开一个进程 passwd #打开一个新终端,查看该进程 ps -elf |grep passwd 2、变量
例: #设置一个全局变量 export xx=ls #设置一个局部变量 zz=kk #切换一个用户,查看这两个变量是否都能访问 su - tt echo $xx
echo $kk
3、多进程
4、进程的状态
程序运行机制:
进程分类:
5、查看进程 5.1、ps 如果不带任何选项,仅查看当前shell中的进程 所有信息,是通过遍历/proc目录下的进程映射文件获取的 ps命令有两种语法格式:
ps aux |more
#TIME 这个进程从触发到现在,共占用了多少CPU时间
#VSZ 虚拟内存集,也就是进程在线性(虚拟)地址空间中实际占用的空间大小 #RSS 常驻内存集,也就是不能被交换到交换分区的内存数据
#TTY以?显示的,表示这个进程和终端无关 #自定义显示信息 ps axo pid,command #可以查看当前终端进程的父进程,也就是echo $$查看到的,bash进程 ps -l ps -elf | more
显示内容:
#4,说明是通过root用户运行的 #1,表示子程序只进行了fork,而没有实际执行(exec) #5,apache用户
#以树形结构列出进程间关系 ps -axjf #查看进程之间的父子关系 pstree pstree -Aup
#查询进程PID pidof sshd 5.2、pgrep #把以htt开头的服务进程的PID显示出来 pgrep -f htt #精确匹配一个服务名称 pgrep -x httpd #显示服务的最后启动的进程 pgrep -ln httpd #显示服务最先启动的进程 pgrep -lo httpd 5.3、top top 动态显示系统的进程情况,默认每3秒刷新一次
命令:
#每2秒刷新一次,共刷新3次 top -d 2 -n 3 #查找固定进程的资源使用情况 top -d 2 -n 3 -p PID 5.4、vmstat 查看内存状态的工具 #每一秒刷新一次,刷新3次 vmstat 1 3 显示内容解释:
−r,等待运行的进程的个数 −b,处于不可中断睡眠态的进程个数,被阻塞的队列的长度
−swpd,交换内存的使用总量 −free,空闲物理内存总量 −buffer,用于存放要写入到磁盘的数据,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。可使用sync命令,手动将数据同步到磁盘。 −cache,从磁盘读出存放到内存中,待今后使用的数据
−si,数据进入swap的速率,单位kb/s −so,数据离开swap的速率
−bi,从块设备读取数据的速率 −bo,保存数据至块设备的速率
−in,中断速率 −cs,上下文切换速率(也称为进程切换)
−us,用户空间所使用的CPU时间比率 −sy,内核空间所使用的时间比率 −id,空闲比率 −wa,等待IO完成所消耗的时间比率 −st,被偷走的时间比率 #查看内存的统计信息 vmstat -s #查看内存空间使用情况 free -m 5.5、lsof 查看系统打开的文件数 #查看80端口被谁占用 lsof -i:80 5.6、pidof #查看ping进程的PID pidof ping 6、进程的中断 进程管理进程,kill也是一个进程,发出一个信号对进程进行操作 6.1、kill
kill -信号 PID
6.2、killall或pkill #将名称匹配的进程全部杀掉 killall -信号 进程名字 #将名称匹配的进程全部杀掉 pkill -信号 进程名字 6.3、信号 #查看所有信号 kill -l
7、控制进程作业 比如:ping,当前终端就不能做其它操作了,这是因为当触发一个子进程的时候,父进程进入休眠状态,直到子进程退出 #查看ping的父进程是2276 ps -elf |grep ping #查看父进程的状态 ps -elf |grep 2276
7.1、& 加在一个命令的最后,可以把这个命令放到后台执行 #将ping命令放到后台运行 ping 1.1.1.1 & 7.2、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态。 ping 1.1.1.1 ctrl+z 7.3、jobs 查看当前有多少在后台运行的命令 #显示所有任务的PID #jobs的状态可以是running, stopped, terminated #但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识 jobs -l 7.4、fg 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。 #将后台运行的命令编号为1的进程调到前台执行 fg %1 7.5、bg 将一个在后台暂停的命令,变成在后台继续执行。 #通过job id控制后台的进程继续执行 bg %2 7.6、kill 方法1:通过jobs命令查看job号(假设为num),然后执行kill %num 方法2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid 前台进程的终止:Ctrl+c 7.7、nohup
#使用nohup,执行ping #然后关掉当前终端,打开一个新终端 nohup ping 10.0.0.1 & ps -elf |grep ping
---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:龚鑫,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |