关于进程的几个重要信息
1 进程的地址空间映射
2 进程的当前状态
3 进程执行的优先级
4 进程已用资源的信息
5 进程已打开的文件和网络端口的信息
6 进程的信号掩码
7 进程的属主
pid:进程的ID号
ppid:
Linux没有提供创建新进程去运行某个特定程序的系统调用。相反,现有进程必须克隆自身去创建一个新进程。克隆进程能够把正在运行的那个程序替换为另外一个程序。原来进程就叫父进程,而副本叫做子进程。进程的PPID就是父进程的PID。
控制终端:
大多数进程拥有与自己相关联的控制终端。控制终端决定了为标准输入、标准输出和标准错误通道而提供的默认链接。当用户从shell启动一个命令时,他的终端通常就称为该进程的控制终端。
进程的生命周期:
为创建一个新进程,一个进程就会系统调用fork来复制自身。fork具有能够返回两个不同值的特性。从子进程的角度看,它返回0.从父进程看,则返回创建的子进程的PID。
在fork之后,子进程经常使用系统调用exec家族的一个成员开始执行新的进程。当系统引导时候,内核会自主创建并安装几个进程。init进程的编号总是1,负责执行系统的启动脚本。除了内核创建的那几个进程之外,其他的所有进程都是init的后代。
当一个进程执行完毕时,它调用一个名为_exit的例程来通知内核它已经做好消亡的准备。它提供一个退出码表明准备退出的原因,惯例0用来表示正常的终止。
进程的消亡要得到其父进程的确认,父进程通过调用wait来确认。父进程接收到子进程退出码的一个副本。如果父进程比子进程先消亡,这个子进程就会成为init的子进程,并在他们消亡是执行wait删除他们。
给进程发送信号:
挂起:kill -STOP PID
继续:kill -CONT PID
杀死:kill -KILL PID
前面的kill只是表示发送信号
KILL是不可封锁的,他在OS级上终止进程。
INT是由终端驱动程序发送的信号。这是一个终止当前操作的请求,如果捕捉到,一些简单的程序应该退出,或者只是允许自己被终结。
TERM是请求彻底终结某项执行操作。
QUIT月TERM类似。
还有一个命令就是killall。例如要刷新xinetd的配置,可以运行
sudo killall -USR1 xinetd
nice 和renice 影响调度的优先级
优先级由进程的谦让度来决定的,允许范围是-20到19, 高谦让度就低优先级
进程的谦让值在创建进程时用nice来设置,并可以在执行时用renice进行调整。nice带一个命令行作为参数,renice带PID或者用户名作为参数。renice需要绝对的优先级,而nice需要的是优先级的增量,然后加上或者减去当前shell的优先级
例子:
nice -n 5 ~/bin/longtask //把优先级降低(提高谦让度)5
sudo renice -5 8829 //把谦让值设为-5
sudo renice 5 -u boggs //把boggs的进程的谦让值设为5
查看进程的两个命令
ps -aux
ps -lax
top 显示动态的 输入f还可以选择显示的参数
注意ps aux输出的一些项目的解释:
%MEM 使用的实际内存的百分比
VSZ 进程的虚拟大小
RSS 驻留集的大小(内存中页的数量)(页面是管理内存的单位,pc上页面的大小通常是4K)
/PROC文件系统
这是一个伪目录,内核把有关系统状态的各种有意义的信息放在这里。ps和top就是从这个目录读取信息。进程特有的信息都分别放到了按PID起名字的子目录里。例如,/proc/1一定是包含init信息的目录。
下面是进程信息文件的各种意义:
cmd 进程正在执行的命令或者进程
cmdline 进程的完整命令行(以null分隔)
cwd 链到进程当前目录的符号链接
environ 进程的环境变量(以null分隔)
exe 链到正被执行的文件的符号链接
fd 子目录,其中包含链到每个打开文件的描述符的链接
maps 内存映射信息(共享段,库等)
root 链到进程的根目录的符号链接
stat 进程的总体状态信息
statm 内存使用情况
STRACE : 追踪信号和系统调用
strace命令可以附在一个执行的进程上进行监视
sudo strace -p 111(进程的PID)
习题:
1、找出一个能导致内存泄漏的进程(自己的程序,如果没有就用netscape)用ps或者top来监视程序运行时的内存的使用情况
2、使用ps命令和awk脚本来判断系统上全部的VSZ和RSS。这些数字跟可用物理内存和交换空间容量之间有什么关系?
阅读(1093) | 评论(0) | 转发(0) |