linux-进程详解

进程概念

是程序的具体实现,执行程序的具体过程。

操作系统的一个重要功能就是为进程提供方便,比如启动进程,为进程分配内存空间,管理进程的相关信息等等。

1)如何产生进程?

执行一个程序或者命令就可以启动一个进程。进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)

Linux启动的第一个进程: #pidof init

查看所有进程:ps -a

2)程序被加载为进程的示意图:

ps aux:查看所有进程及进程详细信息
ps aux grep [关键字]/ps aux grep ab*:过滤后查看的指定进程详细信息
service htttpd start:启动服务(启动服务为httpd)
注☆:不同用户只需相同程序,注意其权限的不同
查看vim进程详细信息:ps au |grep vim

查看进程

进程查看命令:ps(process status)---将某个时间点的程序运作情况截取下来

选项和参数:

a:和输入终端(terminal)关联的所有process,通常与x仪器使用,列出完整信息。
x:后台进程,通常与a这个参数一起使用,可列出较完整信息。
-u:有效使用者(effective user)相关的process
常用组合:ps aux 观察系统所有的程序数据(常用☆☆☆☆)
ps -lA 也是能够查看所有系统的数据
ps axjf连同部分程序树状态
ps -ef|grep xxx:查看某个进程
☆☆☆☆以上不用背,通过man ps查看!

进程中各项的含义:

USER:该进程属于哪个使用者
PID:该进程的程序标识符
%CPU:该进程使用掉的CPU资源百分比
%MEN:该进程所占用物理内存百分比
VSZ:该进程使用掉的虚拟内存量(kbytes)
RSS:该进程占用的物理内存量(kbytes)
TTY:该process是在哪个终端机上面运作,若在终端机无关则显示?,另外,tty1-tty6是本机上面登入这程序
若为pts/0等等的,则表示为由网络连接进主机的程序。
STAT:该进程目前状态,状态显示与ps -l的S旗标相同(R/S/D/T/Z)
START:该process被处罚启动的时间
TIME:该进程实际使用CPU运作时间
COMMADN:该程序实际命令

Linux进程状态:

R(TASK_RUNNING),指正在被CPU运行或者就绪的状态(在run_queue队列里的状态)
S(TASK_INTERRUPTIBLE),可中断的睡眠状态;处于等待状态中的集成,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态。
D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态,该状态的进程只能用wake_up()函数唤醒。
T(TASL_STOPPED or TASK_TRACED),当进程收到信号SIGSTOP,SIGTSTP/SIGTTIN或SIGTTOU时就会进入暂停状态,可向其发送SIGCONT信号让进程转换到可运行状态。
Z(TASK_DEAD-EXIT_ZOMBIE),当进程已经终止运行,但父进程还没有询问其状态情况。不可被kill,即不响应信号,无法用SIGKILL杀死。

动态观察Linux进程状态:(类似于windows的任务管理器)

top:动态观察程序变化,ps是截取一个时间点的程序状态,而投top则可以持续观察进程进行的状态。        
top的选项和参数:        
    -d:后面可以接秒数,就是整个程序画面更新的描述,默认是5秒。    
    -b:以批次的方式执行top,还有更多的参数可以使用,通常会搭配数据流重导向来将批次的结果输出    
    成档案。    
    -n:与-b搭配,意义是需要进行几次top的输出结果    
    -p:指定某些个PID来进行观察检测。    
#top -d 2,  #top -b,  #top -b-n 2           
#top -b-n 5>a.log:组织5个批次放到a.log文件中   #cat a.log        
在top执行过程中可以使用按键指令:        
①?:显示在top当中可以输入的按键指令        
②p:以CPU的使用资格排序显示        
③M:以Memory的使用资源排序显示        
④N:以PID来排序显示        
⑤T:由该Process使用的CPU时间累积(TIME+)排序        
⑥k:给予某个PID后kill该进程        
⑦r:给予某个PID重新制定一个nice值        
⑧q:离开top软件的按键

查看进程树:pstree,选项与参数:

-A:各程序树之间的连接以ASCII字符来连接        
-U:各程序树之间连接以万国码字符来连接,在某些中断接口下可能有乱码        
-p:并同时列出每个process的PID        
-u:并同时列出每个process的所属账号和名称。        
系统进程树同时显示PID与user(root身份来执行,属于root的程序不会显示)        
例:pstree -Aup

进程管理

Kill发送信号(并不只是杀进程)        
选项与参数:        
1)-l:这个是L的小写,列出目前kill能够使用的信号(signal)有哪些,signal:向进程发送信号,指示其进行        
不同操作。用man 7 signal可知。        
2)-15:以正常的程序方式终止一个进程。        
3)-9:立刻强制终止一个进程。        
4)-2:代表不由键盘输入[ctrl]-c同样的动作。        
5)-1:对于sshd这样的守护进程,重新读取一次参数的配置文件(类似reload),如果进程为非守护进程,默认终止该进程。 
※守护进程:守护进程(daemon)是一类在后台运行的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。守护进程是一个在后台运行并且不受任何终端控制的进程。        
演示可以使用hadoop(以java启动的进程)        
查看hadoop的进程:# jps        
ps aux|grep java
对应的PID:ps ax|grep datanode
终止以某命令名称启动的全部进程:killall -signal 命令名

系统资源的监控

1)free:观察内存(memory)使用情况    
-b:直接输入free时,显示的单位是Kbytes,我们可以使用b(bytes),m(Mbytes),k(Kbytes)及g(Gbytes)来定义显示单位。    
-t:在输出的最终结果时,显示物理内存与swap的总量。    
free命令显示选项解析:    
Mem一行显示的是物理内存的量,Swap:虚拟内存的量,total:总量,used是已被使用的量,free则视剩余可用的量。    
shared:共享内存,buffers:将写磁盘的内容,cached:已写磁盘或者已从磁盘读取出的内容。    
2)uname:查阅系统与核心相关信息,uname [-asrmpi]    
选项与参数:    
-a:四PU皮系统相关信息,包括以下的数据都会被列出来    
-s:系统内核名称    
-r:内核版本    
-m:本系统的硬件名称,例如i686或x86_64等    
-p:CPU的类型与-m类似,是显示的是CPU的类型。    
-i:硬件平台(ix86)    
3)uptime:观察系统启动时间与工作负载    
显示目前系统当前时间,已经开机多长时间,用户数,以及1,5,15分钟的平均负载。    
4)netstat:网络监控,选项与参数如下:    
-a:将目前系统上所有的已经连接,监听,socket数据都列出来    
-t:列出tcp网络包信息    
-u:列出udp网络包信息    
-n:以端口(port number)方式来显示(不以程序服务名称)    
-l:李处目前正在监听(listen)的服务    
-p:列出该网络的服务的进程id(PID)    
# netstat -atp :所有tcp协议的链接,并输出pid号    
# netstat -antp    
netstat命令选项显示解析:    
Proto:网络的封包协议,主要分为TCP与UDP封包;    
Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理的信息数,单位:字节;    
Send-Q:发送消息缓存区,向远端进程发送,尚未被其接受的消息数,单位:字节;    
Local Address:本端网络地址(IP:port)    
Foreign Address:与当前进程进行行通信的远程进程的网络地址(IP:port)    
state:网络连接状态,主要邮件里(ESTABLISED)及监听(LISTEN)    
PID/Program name:显示此服务的PID号码以及程序的命令名称    
目前系统上已在监听的网络连接及PID

5)vmstat:侦测系统资源变化,CPU/内存/磁盘输入输出状态        
-a:使用inactive/active(活跃不否)取代buffer/cache的内存输出信息        
-t:开机到目前为止系统复制(fork)的进度数        
-s:将一些事件(开机至目前为止)导致的内存变化情况列表说明        
-S:后面可以接单位,让现实的数据有单位,例如:K/M取代bytes的容量        
-d:列出磁盘的读写总量统计表        
-p:后面列出磁盘分区,可现实该磁盘分区的读写总量和统计        
vmstat命令选项显示解析:        
procs(进程字段):r-等待运行的进程数量;b:不可被唤醒的进程数量        
这两个项目越多代表系统越忙碌(因为系统太忙,所以很····法被执行或抑制在等待而无法被唤醒)        
memory(内存字段):swpd--虚拟内存被使用的容量;free:未被使用内存容量;buff/cache:用户缓冲的内存        
swap(交换分区字段):        
si:每秒从交换分区写到内存的数量大小,由磁盘->内存        
so:每秒写入交换分区内存数量大小,由内存->磁盘        
如果si/so的数值太大,标识内存内的数据常常在磁盘与内存之间传来传去,系统性能会很差        
io(磁盘读写字段)        
bi:从块设备读入数据的总量(读磁盘)(每秒kb);        
bo:块设备写入数据的总量(写磁盘)(每秒kb)。        
如果这部分的值越高,代表系统的I/O非常忙碌。        
system(系统字段):in--每秒被中断进程次数;cs:每秒钟进行的事件切换次数,这两个数值越大,代表系统与接口设备通信非常频繁        
CPU(cpu字段):us(user)非内核态的CPU使用情况,sy(system)内核状态所使用的CPU情况        
id:(idle)闲置的CPU情况,wa:(wait)等待I/O所耗的CPU,st:被虚拟机所盗用的CPU(2.6.11以后才支持)        
6)补充防火墙启动、状态查看、关闭        
#service iptables start        
#service iptables status        
#service iptables stop

任务管理

登陆bash之后,就会取得一个名为bash的进程(它由自己的PID)了。在这个环节中所执行的其它指令,几乎都是所谓的子进程。        
# tail -f install.log  ----启动一个进程(用来跟踪日志文件)在另一个会话终端上(连接同一台虚拟机)        
#pstree -Aup        
|-sshd(2928)-+sshd(3332)---bash(3336)---tail(3460)        
    |       -sshd(3440)---bash(3444)---pstree(3498)        
前台进程和后台进程:        
可以控制与执行命令的bash环境成为前台进程。在操作系统中自行运行,你无法使用ctrl+c终止,可以用bg/fg命令操作的任务,称为后台进程。后台执行的任务不能接收终端(terminal/shell)的输入。        
在bash执行多个任务:        
比如:cp file1 file2 &        
重点在以上这个"&"符号,他标识将file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。也就是说执行这一个命令后,在一个终端仍然可以做其他的工作,拷贝任务执行完成后,系统将会终端显示完成的消息。举例来说:我们在登陆bash后,想要一边复制文件,一边进行编译,那么就需要任务管理。直接将命令放到后台执行&:        
在另有一个bash的环境下,如果想要同时进行多个工作,那么可以将某些工作接放到后台,用户可以继续操作前台任务。        
举例:将/lib/备份为/tmp/lib.tar.gz且不想要等待其完成:        
# tar -czPf /tmp/lib.tar.gz /etc &        
[1] 3581        
[root@tedu~]#        
[1]+ Done          tar -czPf/tmp/lib.tar.gz /etc        
其中中括号为job number,当job执行完成之后会显示Done。        
将目前的工作丢到后台暂停:[ctrl]+z        
#vim anaconda-ks.cfg  #ctrl+z        
[1]+ Stopped          vim anaconda ks.cfg        
说明:在vim的一版模式下,按下[ctrl]+z,屏幕上会出现[1],表示这是一个任务。        
+代表最近一个被放到后台的任务,且目前在后台预期会被取用的任务(调用切换到前台命令时会第一个被调用到)        
Stopped使用[ctrl]+z放到后台的任务都是暂停状态        
#vim install.log  #ctrl+z        
[Z]+  Stopped         vim install.log        
首先唤醒+的任务,再唤醒-任务。        
观察后台任务:        
jobs查看当前工作状态,它的选项与参数:        
-l:除了列出job number与指令串之外,同时列出PID的号码;        
-r:仅列出正在后台run的任务;        
-s:仅列出正在后台暂停(stop)的任务        
将后台任务拿到前台执行:fg(ForeGround)        
fg %jobnumber jobnumber为任务号码(数字);%可有可无。        
fg 1 将任务号为1的进程调到前台。        
终止job:        
jobs -l        
kill -9 3375  #kill vim进程需要-9(强制kill)        
脱机及注销后任务执行:        
nohup可以让你在脱机活注销后,还能够让工作继续执行        
nohup [命令与参数]在当前终端前台执行        
nohup [命令与参数]& 在后台执行,例:nohup tail -f test &

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戰士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值