首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

shell中用到管道有什么作用?(进程传递数据)

(2) 这个命令有没有问题呀?(这个问题其他同事解决) 回答: 1 进程间通讯方式之一 管道 “|” 就是无名管道 用于父子之间 传 递数据 演示: ? 这三个进程是fork出来吗?...总结: 管道 传输 不需要 tcp等网络协议 涉文件系统, 对管道访问用了锁、等待队列和信号等机制同步 做了个测试只运行了不到0.1S时间, 却读取了10MB数据。...这说明管道程序之间传递数据是很有效率 2 : xarg kill -9 和xarg -i kill -9 {} 有差异 -i 是一个一个处理参考 改为 ps -ef | grep xxx |...awk ‘{print $2}’ | xargs kill -9 参考: 1 管道实现机制 http://www.cnblogs.com/biyeymyhjob/archive/2012/11...://bbs.51cto.com/thread-1104907-1-1.html 下次阅读 线程池 UNIX网络编程 第2卷 进程间通信 第四章就有名管道 演示并发服务端实现 其中有下面一句话下次在看

72840
您找到你想要的搜索结果了吗?
是的
没有找到

CreatePipe匿名管道通信

进程向子进程发送数据时,用SetStdHandle()管道读句柄赋予标准输入句柄;在从子进程接收数据时,则用SetStdHandle()管道写句柄赋予标准输出(或标准错误)句柄。...如果进程要发送数据进程进程可调用WriteFile()数据写入管道传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...如果是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()数据写入管道。...然后,进程调用ReadFile()从管道读取出数据传递管道读句柄给函数)。     ...本示例中,当前进程标准输出设置为使用匿名管道,再创建子进程,子进程继承进程标准输出,然后再将进程标准输出恢复为其初始状态。

1K10

管道(Pipe)createPipe

一个进程管道写入数据后,还有一进程就能够从管道还有一端将其读取出来。...匿名管道(Anonymous Pipes)是进程和子进程间单向数据传输一种未命名管道,仅仅能在本地计算机中使用,而不可用于网络间通信。...假设进程要发送数据进程进程可调用WriteFile()数据写入管道传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...假设是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()数据写入管道。...然后,进程调用ReadFile()从管道读取出数据传递管道读句柄给函数)。

1.3K10

WindowsAPI 之 CreatePipe、CreateProcess

比如:输出写入文件,又或者我们要将命令行程序输出结果显示 Windows对话框中。 Windows编程中,重定向需要用到管道(Pipe)概念。管道是一种用于进程间共享数据机制。...如果进程要发送数据进程进程可调用WriteFile()数据写入管 道(传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...(如果是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()数据写入管道。...当进程向子进程发送数据时,用SetStdHandle() 管道读句柄赋予标准输入句柄(这样就不会从标准输入读入数据,而从读句柄所表示位置读取数据);在从子进程接收数据时,则用SetStdHandle...如果进程要发送数据进程进程可调用WriteFile()数据写入管道(传 递管道写句柄给函数),子进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据

3.7K10

C 程序来演示 fork() 和 pipe()

这是我参与「掘金日新计划 · 12 月更文挑战」第6天,点击查看活动详情 fork() 用于创建子进程。此子进程是原始(进程副本。它是类Unix操作系统上创建进程主要方法。...P1 获取一个字符串并将其传递给 P2。P2 接收到字符串与另一个字符串连接起来,而不使用字符串函数,并将其发送回 P1 进行打印。...fork() 返回 : <0 无法创建子(新)进程 =0 表示子进程 >0 即子进程进程进程 ID。当 >0 时,执行进程。 pipe() 用于信息从一个进程传递另一个进程。...现在,进程等到子进程完成。进程之后,进程关闭第二个管道写入端(fd2[1]),并通过管道读取端(fd2[0])读取字符串。...内部子进程: Child 通过关闭管道写入端 (fd1[1]) 来读取进程发送第一个字符串,读取后连接两个字符串并通过 fd2 管道字符串传递进程并退出。

70620

Linux匿名管道及实例

pipe file descriptors are3,4 程序中使用pipe函数建立了一个匿名管道fd,之后向管道一端写入数据并从另一端读出数据数据输出到标准输出,程序最后使用close函数关闭管道两端...父子进程管道读写 进程利用管道向子进程发送消息,使用pipe函数建立管道,使用fork函数创建子进程进程中维护管道数据方向,并在进程中向子进程发送消息,parent_pipe_child.c...上述程序使用pipe加fork组合,实现进程进程通信,程序进程段中关闭了管道读出端,并相应地进程中关闭了管道输入端,从而实现数据从父进程流向子进程。...上述程序中进程分别建立了两个子进程进程1中关闭了管道读出端,进程2中关闭了管道输入端,并在进程中关闭了管道两端,从而构成了从子进程1进程2管道。...另外,程序中进程创建第1个子进程时并没有关闭管道两端,而是创建第2个子进程时才关闭管道,这是为了创建第2个进程时,子进程可以继承存活管道

2.3K30

python多进程编程-进程通信之Pipe

Pipe 简介Pipe是Python中一个双向管道,可以用于两个进程之间传递数据。使用Pipe时,我们可以通过一端数据发送给另一端,也可以从另一端接收数据。...主进程创建了一个Pipe,并将它一个端点传递给子进程,这样子进程就可以将计算结果发送给主进程了。主进程通过recv()方法从管道中接收数据,并打印出来。...注意,recv()方法是一个阻塞方法,所以主进程会一直等待子进程发送数据。需要注意是,Pipe是双向,所以我们也可以进程中向子进程发送数据,只需要使用另一个端点就可以了。...Pipe 阻塞和非阻塞模式默认情况下,Pipe是阻塞模式,也就是说,当管道满了或者没有数据可读时,recv()方法会阻塞,直到有数据可读。...同样地,当管道已经满了或者没有空间可写时,send()方法也会阻塞,直到有空间可写。这意味着,如果我们程序中使用了Pipe,必须确保发送和接收数据时,管道中有足够空间可用,否则会出现死锁。

96431

Linux 进程间通信:管道

特点是只能在父子进程中使用,进程产生子进程前必须打开一个管道文件,然后fork产生子进程,这样子进程通过拷贝进程进程地址空间获得同一个管道文件描述符,以达到使用同一个管道通信目的。...此时除了父子进程外,没人知道这个管道文件描述符,所以通过这个管道信息无法传递给其他进程。这保证了传输数据安全性,当然也降低了管道了通用性,于是系统还提供了命名管道。...,子进程接收到之后打印消息,之后再给进程发消息,进程再打印从子进程接收到消息。...使用同一个管道父子进程可以分时给对方发送消息。我们也可以看到对管道读写一些特点,即: 管道没有数据情况下,对管道读操作会阻塞,直到管道内有数据为止。...如果没满,则可能会写入从1n个字节长度,这取决于当前管道剩余空间长度,并且这些数据可能跟别的进程数据有交叉。

8.3K21

MIT 6.S081 Lab One -- Util

, /user/rm.c)查看如何获取传递给程序命令行参数 如果用户忘记传递参数,sleep应该打印一条错误信息 命令行参数作为字符串传递; 您可以使用atoi将其转换为数字(详见/user/ulib.c...进程应该向子进程发送一个字节; 子进程应该打印“: received ping”,其中是进程ID,并在管道中写入字节发送给进程,然后退出; 级应该读取从子进程而来字节,打印“...提示: 使用pipe来创造管道 使用fork创建子进程 使用read从管道中读取数据,并且使用write向管道中写入数据 使用getpid获取调用进程pid 程序加入MakefileUPROGS...---- Lab代码实习 使用两个管道进行父子进程通信,需要注意是如果管道写端没有close,那么管道数据为空时对管道读取将会阻塞。因此对于不需要管道描述符,要尽可能早关闭。...进程 int fd_p2c[2]; //进程->子进程 pipe(fd_c2p); pipe(fd_p2c); int pid = fork(); int

28310

【翻译】XV6-DRAFT as of September 3,2014 第0章 操作系统接口

进程退出之后,进程wait也就返回了,于是进程打印: parent:chlid 1234 is done 注意进程与子进程拥有不同内存空间与寄存器,因此进程中改变某个变量值,并不影响子进程中该变量值...进程系统调用write从子进程write结束地方开始继续写入数据,这要感谢系统调用wait,它会让子进程结束后,进程才接着执行。...当wc从标准输入读取时,它实际上是从管道读取数据进程管道写端口写入数据,然后关闭了管道文件描述符。...如果管道没有可用数据,从管道读取数据系统调用read一直等待,直到有数据写入管道或者所有与管道写端口关联文件描述符都被关闭。...第二,管道可以传递任意长度数据流,而文件重定向需要在磁盘上有足够空闲空间来存储数据

58160

【Linux】进程通信之匿名管道通信

一、进程间进行通信目的 我们往往需要多个进程协同,共同完成一些事情。 数据传输:一个进程需要将它数据发送给另一个进程 资源共享:多个进程之间共享同样资源。...操作系统提供资源不同,就决定了有不同通信方式。 二、管道通信 2.1、匿名管道通信原理 基于文件方式,让不同进程看到同一份资源通信方式,叫做管道管道通信只能为单向通信。...如果我们让这个进程创建一个子进程,子进程PCB和文件描述符表和进程一模一样,所以此时子进程也是以读和写两种方式打开了进程打开这个文件。这样操作就让父子进程看到了同一份资源。...也就是说,struct file对象是允许多个进程通过指针指向它。 前面也说过,管道通信为单向通信,所以如果想让进程写子进程读,就关闭进程读端关闭子进程写端,反之亦然。...close(pipefd[1]); reader(pipefd[0]); wait(NULL); return 0; } 进程不断读到从子进程发来消息:

13810

python中subprocess

PIPE创建一个新管道。None,没有重定向;子管道将会继承管道文件句柄。此外,标准错误可以用STDOUT来定义,表明应用程序应该从STDOUT捕获到相同文件句柄标准错误数据。...communicate(input=None)     与进程相互作用: 发送数据标准输入。从标准输出、标准错误读取数据, 直到到达文件尾。等待进程终止。...可选input参数应该是发送给子进程字符串,或者如果没有要发送给子进程数据那就用None      communicate() 返回一个元组 (stdout, stderr).     ...Unix系统中, os.popen2, os.popen3 与 os.popen4 同样可以没有shell介入情况下直接传递给程序 以序列形式执行命令行 这种方法可以用下面的方法替换: (...Unix系统中, popen2 也可以没有shell介入情况下直接传递给程序以序列形式执行命令行.

1.6K30

Linux Shell函数返回值

g_var=0 mytest4 here  1 g_var= 可以看到mytest3return了以后其实没有直接返回,而是执行了循环体后语句,同时看到mytest4中也是一样,同时,mytest4...笔者认为,之所以return语句没有直接返回,是因为return语句是管道中执行管道其实是另一个子进程,而return只是从子进程中返回而已,只是while语句结束了。...而函数体之后语句会继续执行。 同理,全局变量进程中进行了修改,但是子进程修改没有办法反应到进程中,全局变量只是作为一个环境变量传入子进程,子进程修改自己环境变量,不会影响进程。...因此写shell函数时候,用到管道(cmd &后台进程也一样)时候一定要清楚此刻是从什么地方返回。...3) echo 返回值 其实在shell中,函数返回值有一个非常安全返回方式,即通过输出到标准输出返回。因为子进程会继承进程标准输出,因此,子进程输出也就直接反应到进程

8.8K20

Linux内核编程--管道pipe

管道定义: 管道是一种进程间通信机制,也是Linux操作系统中一种文件形式。一个进程写入管道数据可以被另一个进程读取。数据按先进先出顺序处理。Linux有两种形式管道文件,管道和FIFO。...管道提供一个单向数据流【半双工管道】, 示意图: 管道和FIFO异同: 管道没有名字,只能由“亲缘关系”进程间进行通信时使用,例如父子进程通信。...管道成功创建时返回0 *有些版本操作系统可以创建全双工管道,使用socketpair函数创建 管道创建经典场景: 一个进程它派生一个或多个子进程之前创建一个管道, 然后管道用于进程和子进程之间或两个兄弟进程之间通信...) --成功运行后,向子进程返回0,并向进程返回子进程进程ID Demo1: 进程关闭管道读端,只往写端写入数据;子进程关闭管道写端,只从读端读出数据 #include <sys/types.h...,没有正常调用fork()或pipe()时返回 NULL --popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command指令 --参数type可使用"r

3.7K10

Linux-xargs命令

概述 xargs命令是给其他命令传递参数一个过滤器,也是组合多个命令一个工具。 它擅长标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令命令参数。...这意味着通过管道传递给xargs输入将会包含换行和空白,不过通过xargs处理,换行和空白将被空格取代。 xargs是构建单行命令重要组件之一。...,就好像你命令是命令行提示下被解释一样,类似于批处理文件里一系列命令。 每个shell脚本有效地运行在shell(parent shell)一个子进程里。...这个shell是指在一个控制终端或在一个xterm窗口中给你命令指示符进程。...) # shell不受影响,变量值没有更改。 COMMAND6 COMMAND7

85820

C++进程间通信 详解2

进程间完成数据传递需要借助操作系统提供特殊方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机蓬勃发展,一些方法由于自身设计缺陷被淘汰或者弃用。...2)进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。 3)进程关闭管道读端,子进程关闭管道写端。进程可以向管道中写入数据,子进程管道数据读出。...4)如果有指向管道读端文件描述符没关闭(管道读端引用计数大于0),而持有管道读端进程没有管道中读数据,这时有进程管道写端写数据,那么管道被写满时再次write会阻塞,直到管道中有空位置了才写入数据并返回...但通过FIFO,不相关进程也能交换数据。 FIFO是Linux基础文件类型中一种。但FIFO文件磁盘上没有数据块,仅仅用来标识内核中一条通道。...于此类似,数据存入缓冲区,则相应字节就自动写入文件。这样,就可在不适用read和write函数情况下,使用地址(指针)完成I/O操作。

19010

Android Framework用到了哪些进程通信(IPC)方式

,要想实现既能读又能写,就需要使用两个管道来完成) 一般是父子进程之间使用 (无名管道一般是进程fork子进程过程中使用,有名管道可以在任意进程之间使用,但前提是两个进程都需要知道管道名称)...进程中使用fork创建子进程,子进程就会继承创建管道描述符。...我们想在进程中通过管道向子进程传递消息,我们就可以直接在pid等于0进程中,写描述符fd[1]关闭,并在pid大于0进程中将读描述符fd[0]关闭,然后向写描述符fd[1]中写入数据进程中从读描述符...共享内存 很快,无需多次拷贝(前面的通信方式,管道和socket都涉及数据多次拷贝,因此不能传递数据量太大消息,共享内存是不需要数据多次拷贝,拿到文件描述符之后,将其映射到两个进程内存空间中...,进程之间就可以通过读写文件进行通信了) 进程之间无需存在亲缘关系 Android中,涉及图片进程传递,就是使用共享内存实现

68310

金蝶测开面经分享(下)

僵尸进程 # 定义:一个进程使用fork创建子进程,如果子进程退出,而进程没有调用wait或者waitpid获取子进程状态信息,那么子进程进程描述符等一系列信息还会保存在系统中。...这是基于这样原理:就算进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。 b.把进程杀掉。...Linux命令 #"|":管道符“|”两个命令隔开,管道符左边命令输出就会作为管道符右边命令输入。...单例模式 # 什么情况下会用到:假如有很多地方都需要使用配置文件内容,也就是说,很多地方都需要创建 AppConfig对象实例,这就导致系统中存在多个AppConfig实例对象,配置文件内容很多情况下会严重浪费内存资源...# 对参数数据类型,GET只接受ASCII字符,而POST没有限制。 # GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

33620
领券