linux 管道 父进程写入管道的数据,其他进程没有处理怎么办?

问题描述

linux 管道 父进程写入管道的数据,其他进程没有处理怎么办?

#include
#include

int
main(void)
{
int n;
char line[MAXLINE];
int fd[2];
pid_t pid;

//create the pipe
if(pipe(fd)<0)
    err_sys("pipe error!");

if((pid = fork()) < 0 ){
    err_sys("fork error");
} else if (pid >0 ){         //parent
    close(fd[0]);            //close fd[0] read
    sleep(5);
    write(fd[1],"hello worldn",12);    //write data into pipe
    sleep(5);
    write(fd[1],"dengfangwenn",strlen("dengfangwenn"));

} else {                //child
    close(fd[1]);//close fd[1]  write
    n = read(fd[0],line ,MAXLINE);     //get data from pipe
    write(STDOUT_FILENO, line ,n);
    printf("child  thread exec one timesn");
}
exit(0);

}

程序运行如下:
hello world;
child thread exec one times
dengfangwen
请问第三条的dengfangwen是怎么打印出来的?
sleep(5);
write(fd[1],"dengfangwenn",strlen("dengfangwenn"));
向管道写dengfangwen的时候,子进程应该已经退出了;

解决方案

待着,不会消失,只有取出来后才会消失

时间: 2024-08-05 11:37:49

linux 管道 父进程写入管道的数据,其他进程没有处理怎么办?的相关文章

操作系统课堂笔记(4)进程管理之多道程序设计和进程

4.1多道程序设计 4.1.1程序的顺序执行:一个具有独立功能的程序独占CPU直到得到最终结果的过程 程序的顺序执行的特点: 1) 顺序性:严格按顺序执行,一一对应 2) 封闭性:结果只能取决于程序本身 3)程序执行结果的确定性:与时间无关 4) 可再观性:不同时间执行,输入相同则结果相同 4.1.2多道程序设计中程序执行环境的变化 1.多道程序设计技术的引入 并发:单CPU,按给定的时间片交替的在处理机上运行:多CPU:并发程序在各自处理机上运行. 根本目的:提高整个系统的效率 衡量系统效率的

Linux进程间通信(三) 管道通信之有名管道及其基础实验

有名管道(FIFO) 首先将上一节的有关有名管道的定义再贴出来 有名管道是对无名管道的一 种改进,它具有以下特点: ①  它可以使互不相关的两个进程间实现彼此通信: ②  该管道可以通过路径名来指出,并且在文件系统中是可见的.在建立了管道之后,两个进程就可以把它 当做普通文件一样进行读写操作,使用非常方便: ③  FIFO严格地遵循先进先出规则,对管道及 FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作 . 有名管道的创建可以使用函数

Linux进程间通信(二) 管道通信之无名管道及其基础实验

管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输 入(其实我更愿意将管道比喻为农村浇地的管子).Linux的管道主要包括两种:无名管道和有名管道.这一节 主要讲无名管道,首先介绍一下这两个管道.(特点很重要啊!) 1.无名管道 无名管道是 Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点: ①  它只能用于具有亲 缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间): ②  它是一个半双工的通信模 式,具有固定的读端和写端: ③

指针-exec加载的程序的值如何写入管道写端?

问题描述 exec加载的程序的值如何写入管道写端? 10C fork一个子进程->创建一个管道->用exec加载一个c程序,这个c程序输出2个字符串,如何把这两个字符串送给管道的写入端?是先返回给进程的一个字符指针,然后再把这个指针给写入端吗?那程序的值是如何传给字符指针的呢? 解决方案 我打100个字都行啊,至少20字?垃圾网站 解决方案二: http://m.blog.csdn.net/blog/u010223072/47777497

linux执行jar文件写入数据库数据出现延迟

问题描述 linux执行jar文件写入数据库数据出现延迟 具体描述如下,同一份数据处理最后并写入数据库的代码,在eclipse里面执行能及时的在oracle表里面查看到插入的数据,但是打成可执行的jar包在linux下有java -jar 去执行需要十五到二十分钟才能看到数据.很是郁闷,有碰到这个情况的朋友吗?情告知,谢谢. 解决方案 没人遇到过吗?我个人认为是linux系统配置的问题.但是不知道具体出在哪里. 解决方案二: 个人觉得不是操作系统的问题,你可以在windows下试一下,如果还是这

使用 Linux tracepoints, perf以及eBPF跟踪网络数据包的流程

本文讲的是使用 Linux tracepoints, perf以及eBPF跟踪网络数据包的流程,我寻找一个低级Linux网络调试工具已经有一段时间了, Linux允许使用虚拟接口和网络命名空间的组合在主机上直接运行复杂网络.当出现问题时,排除故障相当耗时.如果这是L3路由器的问题,可以使用mtr命令进行路由分析.但是,如果这是一个较低级别的问题,我通常会手动检查每个接口.桥接.网络命名空间以及防火墙,并启动几个tcpdump,以便了解发生了什么.这个过程是如此复杂,以至于我想要找到一个可以直接发

linux下进程的最大线程数、进程最大数、进程打开的文件数【转】

转自:http://www.cnblogs.com/niocai/archive/2012/04/01/2428154.html ===========最大线程数============== linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_THREADS_MAX 这个限制可以在 /usr/include/bits/local_lim.h 中查看 对 linuxthreads 这个值一般是 1024,对于 nptl 则没有硬性的限制,仅仅受限于系统的资源 这个系统的资源主要就

Linux源代码情景分析中P54的“不要把进程映像中的这些段跟段式存储管理中的段相混淆”是啥意思

问题描述 Linux源代码情景分析中P54的"不要把进程映像中的这些段跟段式存储管理中的段相混淆"是啥意思 不要把进程映像中的这些段跟段式存储管理中的段相混淆?这两个的区别和联系是啥?求大神解答

Linux之父:除了写内核代码 别的真不会(转)

Linus Torvalds 是 Linux 之父,被誉为活着的传奇. 其实很多人不了解他也并不奇怪,因为人是在是太低调了.现年 46 岁的他每天的工作仍然是编程,领导并推动着 Linux 的发展. 在正在举办的 TED 大会上,Torvalds 谈到,最开始的时候,他并不愿意把 Linux 开源,因为这是一项复杂的工作,并非合作项目,何况他本人一直热爱着编程. 另外一点是,Torvalds 说自己真的不是一个善于交际的人(People Person),性格使然,他就是一个书呆子.独行侠. 好在