进程的概念与理解

注:这是之前学习进程概念和用法的笔记,作为学习记录,也希望多大家有点作用,若有错误也请纠正

一.进程

1.Linux是一个多任务的操作系统

进程就是一种任务,任务参与任务调度,在内核中一个任务用task_struct结构体表示
(2)进程号(PID)

每个进程用进程号作为唯一标识,PID由系统管理,PID是一个正整数,进程结束后PID可以重复使用,但是需要延迟重用

Linux提供了相关函数来获取进程号
(2)进程号(PID)

每个进程用进程号作为唯一标识,PID由系统管理,PID是一个正整数,进程结束后PID可以重复使用,但是需要延迟重用Linux提供了相关函数来获取进程号
在这里插入图片描述
getpid函数返回当前进程PID

getppid返回父进程的PID

4.进程的创建

(1)fork()

在这里插入图片描述
fork函数通过复制父进程创建一个子进程,子进程会复制父进程的进程空间,除了代码段(只读)共享以外,其他内存区域都会复制一份(写拷贝)

fork函数创建子进程之后,父子进程同时运行,先后顺序不确定,谁先结束也不确定

fork函数调用一次,返回2次,父子进程返回后都从fork函数的下一条语句开始运行,父进程返回子进程ID,子进程返回0

在这里插入图片描述
fork函数复制父进程产生子进程时,复制文件描述符,但是不复制文件表

fork函数复制父进程产生子进程时,输入输出缓冲区会复制

fork函数复制父进程产生子进程时,不复制文件锁

当进程结束的时候,会给父进程发送一个信号,让父进程来回收资源,如果子进程结束后没有发送父进程信号,或者父进程没有处理该信号,子进程变成僵尸进程

vfork()
在这里插入图片描述
vfork的形式和fork完全一样,区别在于vfork不复制父进程任何资源,vfork创建的子进程抢占父进程的资源,导致父进程阻塞,父进程解除阻塞的条件是:

    子进程结束,归还父进程资源

    使用其他函数(exec)替换子进程的内容,归还父进程的资源

注:子进程应该用exit函数退出

5.父进程等待子进程结束(回收资源)

wait系列函数可以让父进程等待子进程结束,回收子进程资源
在这里插入图片描述
wait函数让父进程等待任意一个子进程结束,返回子进程的PID,把子进程的退出状态和退出码放入status参数中

如果没有子进程结束,wait函数就会阻塞父进程,直到有子进程结束为止,wait函数也可以回收僵尸子进程 殓尸工

WIFEXITED(status)

        返回真表示子进程正常退出

WEXITSTATUS(status)

        返回子进程的退出码

 WIFSIGNALED(status)

        返回真表示子进程被信号打断
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值