操作系统--基于Linux的进程的并发执行2(超详细/设计/实验/作业/练习)
创始人
2024-06-02 15:55:37
0

目录

  • 课程名:操作系统原理及Linux应用
    • 内容/作用:设计/实验/作业/练习
    • 学习:基于Linux的进程的并发执行2
    • 一、前言
    • 二、环境与设备
    • 三、原理
    • 四、内容
    • 五、总结与分析

课程名:操作系统原理及Linux应用

内容/作用:设计/实验/作业/练习

学习:基于Linux的进程的并发执行2

一、前言

  1. 理解并发进程的基本概念和执行特征
  2. 理解进程的资源继承和并发执行。
  3. 理解进程的资源竞争和互斥实现。

二、环境与设备

1.软件:虚拟机VMware
2.环境:Linux系统环境

三、原理

   1,下面这个C程序展示了UNIX系统中父进程创建子进程及各自分开活动的情况。

fork( )

创建一个新进程。
系统调用格式:

pid=fork( )

参数定义:

int fork( )

fork( )返回值意义如下:

0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。
>0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。
-1:创建失败。
如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。

四、内容

   1,代码:

Fork1.c
#include
#include
#include
int main()
{pid_tfpid;int count=0;fpid=fork();if(fpid<0)printf("error in fork!");else if(fpid==0){printf("I am the child process,my process id is %d\n");printf("我是爹的儿子\n");count++;}else{printf("I am process,my process id is %d\n");printf("我是孩子他爹\n");count++;}printf("统计结果是:%d\n,count");return 0;}
Fork2.c
#include
#include
int main()
{int p;p=fork();if(p==0){putchar('b');}else{p=fork();if(p==0)putchar('c');elseputchar('a');}printf("\n");return 0;}
Fork3,c
#include
int main()
{int p;printf("This is parent(pid=%d) process \n",getpid());p=fork();if(p==0)printf("This id child1(pid=%d) process:b\n",getpid());else{p=fork();if(p==0)printf("This is child2(pid=%d) process :\n",getpid());}printf("\n");return 0;
}
Fork4.C 
#include
#include
int main()
{int i;printf("I son/pa ppos pid fpid\n");for(i=o;i<2,i++){pid_tfpid=fork();if(fpid==0)printf("%d child %4d %4d %4d\n",i,getppid(),getpid(),fpid());else{printf("%d parent %4d %4d %4d\n",i,getppid(),getpid(),fpid());}return 0;}
}

五、总结与分析

   1,printf某些内容时,操作系统仅仅是把该内容放到了缓冲队列里,并没有实际显示到屏幕上。因此fork 后,子进程得到这份拷贝。而当printf中含有\n时, printf将刷新,因此子进程无法得到这份拷贝,fork也就只输出一次了。因此程序输出结果不管是子进程还是父进程前面都带有,而程序B只有当父进程执行时才会输出。

相关内容

热门资讯

玩家终于实锤了!熊猫互娱有挂吗... 自定义熊猫互娱系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想分...
玩家终于实锤了!汇友娱乐有挂吗... 玩家终于实锤了!汇友娱乐有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)1、让任何用户在无需AI...
玩家终于实锤了!青鸾有挂吗(分... 您好,青鸾这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785}很多...
玩家终于实锤了!丫丫湖南麻将有... 玩家终于实锤了!丫丫湖南麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的...
玩家终于实锤了!微乐浙江麻将有... 玩家终于实锤了!微乐浙江麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)一、微乐浙江麻将AI...
玩家终于实锤了!南通长牌有挂吗... 玩家终于实锤了!南通长牌有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家...
玩家终于实锤了!天天微乐有挂吗... 玩家终于实锤了!天天微乐有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)1、让任何用户在无需AI...
玩家终于实锤了!微乐双扣有挂吗... 玩家终于实锤了!微乐双扣有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)一、微乐双扣AI软件牌型...
玩家终于实锤了!龙焱互娱有挂吗... 玩家终于实锤了!龙焱互娱有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩家...
玩家终于实锤了!白金岛十胡卡有... 玩家终于实锤了!白金岛十胡卡有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的...
玩家终于实锤了!圣盛宜昌花牌有... 自定义圣盛宜昌花牌系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是...
玩家终于实锤了!微乐山东麻将有... 亲,微乐山东麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,微乐山东麻将的开挂...
玩家终于实锤了!粤麻圈麻将有挂... 玩家终于实锤了!粤麻圈麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的玩...
玩家终于实锤了!YY湖南麻将2... 自定义YY湖南麻将2系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你...
玩家终于实锤了!同城游牛鬼有挂... 自定义同城游牛鬼系统规律,只需要输入自己想要的开挂功能,一键便可以生成出微扑克专用辅助器,不管你是想...
玩家终于实锤了!打两圈麻将有挂... 亲,打两圈麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,打两圈麻将的开挂软件...
玩家终于实锤了!POKERIS... 玩家终于实锤了!POKERIST有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)一、POKERI...
玩家终于实锤了!微乐云南麻将有... 您好:微乐云南麻将确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在...
玩家终于实锤了!哈哈长沙麻将有... 玩家终于实锤了!哈哈长沙麻将有挂吗(分享技巧)原来是有挂的(已更新)(今日头条)是一款可以让一直输的...
玩家终于实锤了!毛豆娱乐有挂吗... 您好:毛豆娱乐确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款...