嵌入式linux-进程-fork创建

01.进程创建

#include <unistd.h>

pid_t fork(void);

        fork函数用于创建新进程,pid_t表示fork函数的返回值。

        系统如果因为资源不足等原因无法创建新进程,则fork函数返回值为-1;

        如果成功,父进程(fork函数本身所处的进程是父进程)返回子进程(fork新创建出来的进程)的进程号(一个大于0的整数),子进程返回0;此处不好理解,结合后面的测试代码进行理解。

        通过fork的返回值区分父进程和子进程。

02.测试案例

子进程是从fork函数的下一条语句开始执行。

fork函数创建的子进程会复制fork()函数以下的所有代码(由test02可明显看到hello fork!打印两次,父子进程各一次,而parent process和child process则由于if pid ==0判断区分父子进程分别打印)

子进程继承了父进程的内容(几乎复制了父进程的所有内容,除了pid等少数)

父子进程有独立的地址空间,互不影响

若父进程先结束:

        子进程成为孤儿进程,被init进程(可以算是所有其他进程的祖先,由linux系统镜像创建出来的唯一没有父进程的特殊进程)收养

        子进程变成后台进程

若子进程先结束

        父进程如果没有及时回收,子进程变成僵尸进程

03.进程的状态(细致版)

        

1 “蛋生”可以看到,一个进程的诞生,是从其父进程调用 fork( )开始的。

2 ,进程刚被创建出来的时候,处于 TASK_RUNNING 状态,从图中看到,处于该状态 的进程可以是正在进程等待队列中排队,也可以占用 CPU 正在运行,我们习惯上称前者为 “就绪”,称后者为“执行态”。当进程状态为 TASK_RUNNING 并且占用 CPU 时才是真 正的运行。

3,刚被创建的进程都处于“就绪”状态,等待系统调度,内核中的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值