进程的概念

文章介绍了程序和进程的概念,进程的不同状态,包括就绪态、运行态、暂停态、睡眠态、僵尸态和死亡态。同时讲解了如何通过fork()创建子进程,以及如何处理孤儿进程和僵尸进程,特别提到了wait()函数在回收资源和管理进程状态中的作用。
摘要由CSDN通过智能技术生成
1.什么是程序?
程序:一堆待执行的代码。 gcc hello.c -o hello 静态的文本数据
什么是进程?
进程:当程序被CPU加载时,根据每一行代码做出相应的效果,形成动态的过程,那么这个过程就是 进程。 其实说白了,进程就是一个正在执行的程序。
查看进程ID号命令: ps -ef(静态)
查看进程CPU的占用率:top(动态)
查看自己的PID号:getpid()
查看父进程的PID号:getppid()
2.进程从诞生到死亡会经历哪些状态?
就绪态 TASK_RUNNING  等待CPU资源 不占用CPU资源,不运行代码。
运行态 TASK_RUNNING  占用CPU资源,运行代码。(执行态)
暂停态 TASK_STOPPED  占用CPU资源,不运行代码。 可以到就绪态。
睡眠态TASK_UNINTERRUPIBLE   占用CPU资源,运行代码。 可以到就绪态。
TASK_INTERRUPTIBLE 响应信号 ----》浅度睡眠 pause()--->一直等待下一信号
TASK_UNINTERRUPTIBLE 不响应信号 ----》深度睡眠
僵尸态 EXIT_ZOMBIE 占用CPU资源,不运行代码。不可以到运行态。进程退出的时候,就一定会变 成僵尸态
死亡态 EXIT_DEAD 不占用CPU资源,不运行代码。进程退出的时候,如果有人去帮自己回收资源, 那么僵尸态就会变为死亡态。
3.如何在一个正在运行的进程中产生一个子进程?
可以用pid_t fork(void),返回值:成功(一次调用有两次返回)分别是:
>0:父进程,但返回的ID号是子进程的ID号
=0:子进程
失败:返回-1
4.什么是孤儿进程和僵尸进程?
孤儿进程:调用fork()函数创建的子进程,父进程若比子进程先退出,子进程称为孤儿进程。
僵尸进程:调用fork()函数创建的子进程,子进程若比父进程先退出,子进程退出后称为僵尸进程(进程的状态栏为defunct)。
注意:若父进程走了,子进程还在一直循环,可用命令kill -9(后边这里写的是子进程的ID号)来结束。
5解决僵尸态问题
这个时候就要用到函数pid_t wait(int*status);  status:监听子进程的退出状态
当里边填NULL时,如:wait(NULL):表示父进程只回收资源,不关心子进程退出状态
当里边不为NULL时,如:int i,wait(&i),表示父进程不仅回收资源还关心子进程的退出状态,退出状态保存到i变量中。
返回值:成功:返回回收资源的子进程ID号,失败返回-1。
注意:wait属于一个阻塞函数,若子进程没退出变成僵尸态,这函数就会一直阻塞,直到子进程变成僵尸态后。
本次小编就不画图了,刚兴趣的朋友可以结合以下代码,动动手测试体验以下哦~

 

 分享到这里就结束啦,刚兴趣的朋友可以点个关注,小编会不定期更新分享编程知识哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值