没有合适的资源?快使用搜索试试~ 我知道了~
进程控制进程的生命周期:从生到死fork:创建新进程功能fork系统调用是创建新进程的唯一方式原先的进程称做“父进程”,新创建进程被称作“子进程”完全复制:新进
资源详情
资源评论
资源推荐
进程控制
进程的生命周期:从生到死
fork:创建新进程
◼ 功能
◆fork系统调用是创建新进程的唯一方式
◆原先的进程称做“父进程”,新创建进程被称作“子进程”
◆完全复制:新进程的指令,用户数据段,堆栈段
◆部分复制:系统数据段
◼ fork返回值:父子进程都收到返回值,但不相同
◆返回值很关键,它用于区分父进程(返回值>0,是子进程的PID)和子进
程(返回值=0),失败时返回-1
◼ 内核实现
◆创建新的PCB,复制父进程环境(包括PCB和内存资源)给子进程
◆父子进程可以共享程序和数据(例如:copy-on-write技术,COW),但是
系统核心的这些安排,对程序员透明
fork举例(1)
执行结果
[1] ./fork1: BEGIN
[2] a+b=30
[3] a+b=230
[4] ./fork1: END
[3] a+b=230
[4] ./fork1: END
int a;
int main(int argc, char **argv)
{
int b;
printf("[1] %s: BEGIN\n", argv[0]);
a = 10;
b = 20;
printf("[2] a+b=%d\n", a + b);
fork();
a += 100;
b += 100;
printf("[3] a+b=%d\n", a + b);
printf("[4] %s: END\n", argv[0]);
}
fork举例(2)
执行结果
Hello
PID=18378 ppid=18377, a=6
Bye
PID=18377 child=18378, a=6
Bye
int main(void)
{
int a, ret;
printf("Hello\n");
a = 3;
ret = fork();
a += 3;
if (ret > 0) {
printf("PID=%d child=%d, a=%d\n",
getpid(), ret, a);
} else if (ret == 0) {
printf("PID=%d ppid=%d, a=%d\n",
getpid(), getppid(), a);
} else {
perror("Create new process");
}
printf("Bye\n");
}
剩余31页未读,继续阅读
Friday永不为奴
- 粉丝: 13
- 资源: 317
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0