Linux进程基本知识

来源:互联网 发布:手机查看淘宝注册时间 编辑:程序博客网 时间:2024/06/06 10:50

进程: 进程是一个独立的可调度的任务,进程是一个抽象实体。
当系统在执行某个程序时,分配和释放的各种资源;
进程是一个程序的一次执行的过程。
进程和程序的区别:
程序是静态的,它是一些保存在磁盘上的指令的有序集合,没有任何执行的概念 进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消亡
程序主要构成:代码段(只读,共享)、数据段(虚拟地址)
进程主要构成:代码段、数据段、堆栈段、PCB(描述进程信息的一个结构体)(实际分配物理地址)
进程的种类:交互进程、批处理进程、守护进程。
进程的状态:运行态(就绪态),可中断等待态,不可中断等待态,停止态,僵尸态。
注意:不是只有正在占CPU运行的程序才叫运行态。比如:单核CUP,从微观角度去看,程序都是在串行运行的,而不是并行运行的,同一时间只能有一个进程占用CUP,如果只有正在占CPU运行的进程才叫运行态,那么不管什么时间就都只有一个进程是处于运行态的啦。
所以运行态是:进程拥有一切的资源,就差CPU了,也就是running和runnable状态的,这种的状态的进程就叫进行态。
注意:僵尸进程是干不死的(kill -9僵尸进程的PID没有用,因为僵尸进程已经死了,你怎么干他都没不了),除非父进程为其收尸(wait()、waitpid()),其实僵尸的父进程是没有收尸这一功能的,除非调用wait()、waitpid()函数实现,之所以父进程结束后其僵尸进程会被收拾,是因为僵尸进程的父进程走了以后,此僵尸进程会再找个爹,虽然它死了,但是它很聪明啊,找了个最NB的爹,也就是init进程这个进程是用户空间所有进程的祖先进程,所有进程都是由他直接或者间接生出来的。init进程也是来者不拒,它一看儿子死了,没人收拾啊,好歹父子一场,就给它收尸了。所以init进程有收尸的功能。
Linux 对进程描述:vi -t task_struct可查看,索引之前,需要生成tags文件(在/usr/include和/usr/src下生成)
struct task_struct{
1.pid //进程号
2.ppid//父进程号
3.一组寄存器值(pc寄存器:告诉cpu需要执行的指令所在内存中的地址)
4.进程状态
运行态(R),可中断等待态(S),不可中断等待态(D),停止态(T),僵尸态(Z)
....
}
每一个进程都是有一个进程控制块(PCB)task_struct结构体描述的,每个结构体大约1.7K
1.查看系统进程
ps -ef
例如:ps-ef | grep 进程名、ps-ef | grep 进程号
2.查看系统进程状态
ps aux、ps axj
例如: psaux | grep 进程名、psaux | grep 进程号
3.信号
(1)kill -l 显示系统中支持的信号
(2)发一个信号给指定PID进程
kill -信号编号 PID
例如:发送SIGSTOP信号
kill -19 PID 或 kill -SIGSTOP PID
(3)发一个信号给指定进程名的进程
killall -信号编号 进程名
(4)top:动态查看进程的信息
(5)getpid获取当前进程号,getppid获取当前进程父进程进程号
4.指定的进程的优先级
在Linux 中通过nice值来影响进程的优先级,nice值越小进程的优先级越高,nice值范围: [-20,19]
(1)运行程序的时候,指定进程的nice值
nice -nice值 执行的程序
例如:
nice -1 ./while 以nice值为1的优先级方式运行./while
nice --1 ./while 以nice值为-1的优先级方式运行./while
(2)修改系统中进程的nice值
renice nice值 PID
例如:
renice 10 8123 改变正在运行进程的nice值,设为10
renice -10 8213 改变正在运行进程的nice值,设为-10
默认的nice值为0
5.后台运行时加上&在后台运行
&:程序运行时加上&在后台运行
例如:./a.out &
jobs:通过jobs查看后台运行或者挂起进程对应的号码
bg:然后通过bg 对应的号码 来使挂起的进程放入后台执行
例如:bg 1
fg:通过fg 对应的号码 把后台运行的进程放到前台运行
例如:fg 1
6.系统为每一个进程都分配一段0~4G的虚拟地址空间

原创粉丝点击