进程的了解

一、进程的概念

进程:(进行中的程序)--正在运行的程序 (动态的) ---内存 

程序的一次执行过程

进程是程序的一个实例

进程是跑起来的程序,一个程序可以对应多个进程。

程序----静态---硬盘              进程---动态---内存

操作系统为了管理程序的动态运行过程----进程

程序 = 代码(代码区) + 数据(栈区,堆区,字符串常量区,静态区)

进程 = PCB(进程控制块) + 进程实体(text | data | bss | 堆区 | 栈区)
 

二、进程的状态

ps -elf | grep 程序名     主要查看父子进程,包含pid,ppid

查看a.out进程

ps aux | grep 程序名   查看某个进程的pid号及状态信息。

pstree -sp pid号  查看父子进程间的关系。

kill  给进程发信号

kill -l 查看kill可以发送的信号,kill -9 pid号  给指定的pid号发送9信号。

常用的信号:-9:结束,-19:暂停,-18:继续。

killall    可以指定进程名称这种方式发送信号,例如:killall -9 a.out结束所有的a.out

三态模型-----操作系统理论(运行、就绪、阻塞)

linux系统下(七种)

man ps 

R------运行或可运行(就绪态)

S------可中断的睡眠态

D------不可中断的睡眠态

T------暂停态

Z------僵尸态

三、进程的编程

为了实现多任务

四部分:创建进程、进程的执行、进程结束、进程结束时的资源回收---僵尸态。

进程的创建:pid_t fork(void)

功能:创建一个子进程,通过复制调用进程复制的子进程。

成功:在父进程中返回子进程的pid号,在子进程中返回0。

失败:返回-1,并且子进程没有被创建。

pid号:非负整数,最小为1。

fork成功后,从下一句开始执行。

调用一次函数,在父进程和子进程分别返回了一个值。

32位平台:1.每个进程拥有独立的4G内存空间(虚拟的)

                   2.每个进程运行在各自独立的4G内存空间中

                   3.父子进程间,内存相互独立,不受影响。

                   4.父子进程运行的顺序不确定,取决于操作系统--先调度谁。

结束子进程,父进程未收尸--僵尸态

结束父进程,子进程还在,被操作系统收养,此时子进程在后台运行。

有x个fork(),就有2^{x}个进程,创建了2^{x}-1个进程。

例如:存在两个fork,则有四个进程,创建了3个进程,树状图如下:

练习: fork()&&fork()||fork();    //总共几个进程?

getpid: pid_t getpid(void); //pid_t

功能:获得调用该函数进程的pid

 返回值: 进程的pid

getppid:pid_t getppid(void);

功能:获得调用该函数进程的父进程pid号

返回值:返回父进程id号
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值