关于进程的定义
一个进程由一个地址空间和内核内部的一组数据结构共同组成的。
当计算机开机的时候,内核(kernel)只建立了一个init进程。Linux kernel并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的。新的进程要通过老的进程复制自身得到,fork是一个系统调用,进程存活于内存中。每个进程都在内存中分配有属于自己的一片空间 。当进程fork的时候,Linux在内存中开出新的内存空间给新的进程,并将老的进程空间中的内容复制到新的空间中,此后两个进程同时运行。
老进程成为新进程的父进程,而相应的,新进程就是老的进程的子进程。一个进程除了有一个PID之外,还会有一个PPID来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是init进程。所以说,所有的进程也构成一个以init为根的树状结构。
1.PID:进程的ID号
每个进程都会有一个独一无二的ID号,就是所谓的PID,并且是按照创建进程的顺序来分配。
2.PPID:父PID
父进程是,一个进程创建时,克隆自身成一个子进程,原来的进程成为父进程,当一个子进程无法辨认时,则父进程PID变成很有用的信息。
3.UID和EUID真实的和有效的用户ID
进程的UID是其创建者的用户标识号,其实是复制了父进程的UID值。
EUID是“有效用户的ID”,这是一个额外的UID。(确定进程何时可以处理哪些文件的权限问题)
4.GID和EGID真实的和有效的组ID
GID就是进程的组标识号,EGID跟GID的关系与UID和EUID类似。
进程的生命周期

以上图片为网上解释的比较好的。
进程的状态
一般分成四个状态:
1.Runnable -(可运行状态) ---进程可以被执行
2.Sleepling -(睡眠状态)-------进程正在等待某些资源
3.Zombie---(僵尸进程)-------进程试图消亡
4.Stopped--(停止状态)-------进程被挂起,不允许执行
进程的优先级:nice和renice
在Linux 操作系统中,进程之间是竟争资源(比如CPU和内存的占用)关系。这个竟争优劣是通过一个数值来实现的,也就是谦让度。高谦让度表示进程优化级别最低。负值或0表示对高优点级,对其它进程不谦让,也就是拥有优先占用系统资源的权利。谦让度的值从 -20到19。
nice 的应用举例:
nice -n 5 gaim & 注:运行gaim程序,并为它指定谦让度增量为5
kill:发送信号,干预进程
语法:kill *[ -single] pid *
single有30多中不同类型的信号,都以数字代替。
1---挂起
2---中断
3---退出
....
常用的一般为9,杀死进程。
killall 后面可以加程序的名字,杀死所有程序相关的进程。
ps/top:监视进程
一般使用命令:
ps aux
ps lux---运行速度比上面的稍快一点
ps -ef
top---动态监控进程
小提示:root用户可以用-q参数执行top,设置成最高优先级,当跟踪一个把系统拖跨的进程的时候特别有用。
其他具体用法,man一下。
失控进程处理
失控进程有两类:
1.过度占用系统某种资源的用户进程
2.另一种是突然发狂并呈现狂暴行为的系统进程
第一种失控未必是一种故障,只是过度占用资源。
可以用上面提到的系统监视命令ps或top以及df -k,查看是那个进程出问题,或是那个进程文件系统使用率过高。然后可用uptime限制进程数,谈后再考虑处理办法。
这个暂时只了解这么多,后续会补充。
网友评论