1、进程的创建

编写一段程序,使用系统调用fork( )创建两个子进程,在系统中有一个父进程和两个子进程活动。让每个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。

  # include<stdio.h>

     main()

     { int  p1, p2;

     while((p1=fork())= = -);

     if(p1= =)

     putchar(‘b’);

     else

       { while((p2=fork())= =-);

         if(p2= =)

         putchar(‘c’);

         else

         putchar( ‘a’);

        }

      } 

2、 修改已编写的程序,将每个进程的输出由单个字符改为一句话,再观察程序执行时屏幕上出现的现象,并分析其原因。

 # include<stdio.h>
main()
{ int p1, p2, i;
while((p1=fork())= = -);
if(p1= =)
for(i=;i<;i++)
printf(“child%d\n”,i);
else
{ while((p2=fork())= =-);
If(p2= =)
for(i=;i<;i++)
printf(“son%d\n”,i);
else
for(i=;i<;i++)
printf(“daughter%d\n”,i);
}
}

3、编写程序创建进程树如图1和图2所示,在每个进程中显示当前进程识别码和父进程识别码。

图一

#include<stdio.h>
//#include<sys/types.h> /* 提供类型pid_t的定义 */
#include<unistd.h> /* 提供函数的定义 */
int main()
{
int p1,p2,p3;
while((p1=fork())== -);
if(p1==)
{
while((p2=fork())==-);
if(p2==)
{
while((p3=fork())==-);
if(p3==)
{
// putchar('d');
printf("I am D,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
}
else
{
// putchar('c');
printf("I am C,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
}
}
else
{
// putchar('b');
printf("I am B,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
}
}
else
{
//putchar('a');
printf("I am A,My pid is %d\n", getpid());
}
printf("\n");
getchar();
}

图二

#include<stdio.h>
#include<sys/types.h> /* 提供类型pid_t的定义 */ #include<unistd.h> /* 提供函数的定义 */
int main()
{
int p1_B,p1_C,p2_D,p2_E;
while((p1_B=fork())== -);
if(p1_B==)
{
printf("I am B,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
while((p1_C=fork())== -);
if(p1_C==)
printf("I am C,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
}
else
{
printf("I am A,My pid is %d\n",getpid());
while((p2_D=fork())==-);
if(p2_D==)
{
printf("I am D,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
while((p2_E=fork())== -);
if(p2_E==)
printf("I am E,My pid is %d, my parent's pid is %d\n", getpid(), getppid());
}
}
getchar();
}

进程控制编程——Linux编程的更多相关文章

  1. Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理

    一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...

  2. Linux&c 文件操作,线程进程控制,网络编程,简单知识点梳理

    一:文件操作 在linux下,一切皆文件,目录是文件,称为目录文件,内容是该目录的目录项(但是目录只有内核可以编辑,超级用户也不可以编辑),设备也是设备文件,在/dev存放的就是一些设备文件,linu ...

  3. 【目录】linux 编程

    随笔分类 - linux 编程 Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较) 摘要: 一.概述 接着上篇讲的结构化命令,最后讲到了test命令 ...

  4. 【linux草鞋应用编程系列】_2_ 环境变量和进程控制

    一. 环境变量     应用程序在执行的时候,可能需要获取系统的环境变量,从而执行一些相应的操作.     在linux中有两种方法获取环境变量,分述如下.   1.通过main函数的参数获取环境变量 ...

  5. Linux系统编程:进程控制

    一.进程相关操作与编程对应函数 1.进程创建:两种方式来实现. ①fork:创建一个子进程,父子进程共享一份代码程序,但是各有一份独立的数据,为了效率和保持数据的独立采用写时复制技术(COW).运行无 ...

  6. Linux网络编程学习(三) ----- 进程控制实例(第三章)

    本节主要介绍一个进程控制的实例,功能就是在前台或者后台接收命令并执行命令,还能处理由若干个命令组成的命令行,该程序命名为samllsh. 基本逻辑就是 while(EOF not typed) { 从 ...

  7. Linux网络编程学习(二) ----- 进程控制(第三章)

    1.进程和程序 程序是一个可执行文件,而一个进程是一个执行中的程序实例.一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序.比如几个用户可以同时运行一个编辑程序, ...

  8. Linux系统编程之进程控制(进程创建、终止、等待及替换)

    进程创建 在上一节讲解进程概念时,我们提到fork函数是从已经存在的进程中创建一个新进程.那么,系统是如何创建一个新进程的呢?这就需要我们更深入的剖析fork函数. 1.1 fork函数的返回值 调用 ...

  9. (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. .gvimrc配置备份

    syn on "语法支持 colorscheme murphy set go= "common conf {{ 通用配置 "set ai "自动缩进 set b ...

  2. switch-case最容易忽视的一点

    switch语句是常用的一种java语法,但是往往最基本的,总是最容易被人们忽略. 首先,看下switch语句的基本结构: switch(表达式){ case 常量1: 语句1; break; cas ...

  3. 快速把项目部署到webLogic上

    weblogic简介BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应 用的Java应用服务器.将Java的动态功能和Java Enterprise标准的安全 ...

  4. es6学习笔记10--箭头函数

    基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...

  5. POJ 1007 DNA Sorting(sort函数的使用)

    Description One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are ...

  6. .19-浅析webpack源码之compile流程-rules参数处理(2)

    第一步处理rule为字符串,直接返回一个包装类,很简单看注释就好了. test/include/exclude 然后处理test.include.exclude,如下: if (rule.test | ...

  7. 记一次webapi传参数的问题

    .net小白一枚,经过了几个小时的研究,由于错误的写法导致后台始终接受不到前台传递过来的参数.首先看看控制器的参数 public Core.MVC.ServiceResult<DTO.Out.M ...

  8. zookeeper 知识点汇总

    目录 Zookeeper 是什么 Zookeeper 树状模型 Zookeeper 集群结构 如何使用 ZooKeeper 运行 Zookeeper 步骤1 修改 ZooKeeper 配置文件 步骤 ...

  9. wei

    <!--PageEndHtml Block Begin-->   JAVASCRIPT:   <script charset="Shift_JIS" src=&q ...

  10. MongoDB的web可视化管理工具

    现在许多应用都使用MongoDB存储大量的业务数据,MongoDB基于文档式的存储,在大数据行业的应用还是很普遍的.MongoDB的客户端工具也很多,基于web的却不多,国产的就更少了,下面介绍的是一 ...