linux父子进程同步实验,Linux-父子进程的简单同步

int fork()

功能:创建一个子进程

返回值:0-创建成功,-1-创建进程失败,>0-创建进程成功,返回返回子进程id

int wait(int * status)

功能:将调用的进程挂起,等待子进程运行结束

参数:指向整数的指针,0-子进程正常结束,非0-出现运行有误

返回值:调用正常-子进程id,调用进程无子进程-调用失败,返回-1

int exit()

功能:终止进程的执行

返回值:无

sleep(n)

功能:进程随眠1秒

参数:n-随眠时间

实例代码

1.1 父进程创建子进程,分别循环输出"I am parent."和"I am child."5次,每次输出一次后使用sleep(1)延时1s。

#include

#include

/*

1_1.c

父进程创建子进程,分别循环输出

"I am child."和"I am parent."

每输出一次随眠1s。

*/

main()

{

int p;

while((p=fork())==-1);

if(p==0)

{/*子进程块*/

int i;

for(i=0;i<5;i++)

{

printf("I am child.\n");

sleep(1);

}

}

else

{/*父进程块*/

int i;

for(i=0;i<5;i++)

{

printf("I am parent.\n");

sleep(1);

}

}

}

1.2 在1.1的基础上利用exit()和wait()实现父子进程间的同步。

#include

#include

#include

/*

简单的进程同步:

父进程等待子进程输出后再输出

*/

main()

{

int p;

while((p=fork())==-1);

if(p==0)

{/*子进程块*/

int i;

for(i=0;i<5;i++)

{

printf("I am child.\n");

sleep(1);

}

exit(0);

}

else

{/*父进程块*/

int i;

for(i=0;i<5;i++)

{

wait(0);

printf("I am parent.\n");

sleep(1);

}

}

}

扩展链接

&lbrack;apue&rsqb; 使用文件记录锁无法实现父子进程交互执行同步

父子进程间交互执行是指用一种同步原语,实现父进程和子进程在某一时刻只有一个进程执行,之后由另外一个进程执行,用一段代码举例如下: SYNC_INIT(); , counter=; pid_t pid ...

linux父子进程问题

今天遇到一个linux进程启动时指定Max open files不对的问题,导致程序建立socket异常,进而导致fullgc问题,影响正常服务.所以顺带又温习了下linux下的父子进程的特性. 孤儿 ...

Linux 父子进程实现复制文件内容到另一个文件内

1. 子进程先拷贝前一半 ,父进程一直阻塞到子进程拷贝完再拷贝后一半 /* 子进程先拷贝前一半文件,父进程先阻塞等待子进程拷贝完前一半内容, * 然后父进程在拷贝,后一半内容 * */ #includ ...

linux杀死进程的简单讲解

一. 终止进程的工具kill .killall.pkill.xkill 终止一个进程或终止一个正在运行的程序,一般是通过kill .killall.pkill.xkill 等进行.比如一个程序已经死掉 ...

&lbrack;置顶&rsqb; 简单解析linux下进程通信方法

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...

【Linux 进程】fork父子进程间共享数据分析

之前我们通过fork()函数,得知了父子进程之间的存在着代码的拷贝,且父子进程都相互独立执行,那么父子进程是否共享同一段数据,即是否存在着数据共享.接下来我们就来分析分析父子进程是否存在着数据共享. ...

【Linux 进程】之关于父子进程之间的数据共享分析

之前我们通过fork()函数,得知了父子进程之间的存在着代码的拷贝,且父子进程都相互独立执行,那么父子进程是否共享同一段数据,即是否存在着数据共享.接下来我们就来分析分析父子进程是否存在着数据共享. ...

linux进程通信之使用匿名管道进行父子进程通信

管道:是指用于连接一个读进程和一个写进程,以实现它们之间通信的共享文件,又称pipe文件. 管道是单向的.先进先出的.无结构的.固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起 ...

LINUX编程学习笔记&lpar;十四&rpar; 创建进程与 父子进程内存空间

1什么是进程:进程是一个执行中的程序 执行的程序: 代码->资源->CPU 进程有很多数据维护:进程状态/进程属性 所有进程属性采用的一个树形结构体维护 ps  -a//所有进程 ps - ...

随机推荐

MyIsam和InnoDB的区别

个人见解: 1.最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持 所以有用到事务处理和外键的,要用Innodb 2. InnoDB 中不保存表的具体行数,也就是说,执行s ...

while do while 区别

一.while语句的一般形式为:while(表达式)语句其中表达式是循环条件,语句为循环体.while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句. int i=10; whil ...

Git add 常见用法

Git add   git add [参数]  [--] //作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用gi ...

Awk by Example--转载

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值