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

CreatePipe匿名管道通信

生成进程之前,进程首先调用Win32 API SetStdHandle()使子进程进程可共用标准输入、标准输出和标准错误句柄。...当进程进程发送数据时,用SetStdHandle()将管道读句柄赋予标准输入句柄;在从子进程接收数据时,则用SetStdHandle()将管道写句柄赋予标准输出(或标准错误)句柄。...然后,进程可以调用进程创建函数CreateProcess()生成进程。...如果是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()将数据写入到管道。...创建进程只是标准输出和标准错误发送一些文本信息,其中发送给标准输出文本将重定向输出到管道,发送给标准错误文本将不改变输出。

1K10

管道(Pipe)createPipe

一个进程管道写入数据后,还有一进程就能够从管道还有一端将其读取出来。...进程能够调用进程创建函数CreateProcess()生成进程。...假设进程发送数据到子进程进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),子进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...假设是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()将数据写入到管道。...在用WriteFile()函数管道写入数据时,仅仅有在管道写完指定字节数据后或是在有发生错误时函数才会返回。

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

WindowsAPI 之 CreatePipe、CreateProcess

匿名管道主要用于本地进程和子进程之间通信,在进程中的话,首先是要创建一个匿名管道,在创建匿名管道成功后,可以获取到对这个匿名管道读写句柄,然后父进程就可以这个匿名管道中写入数据和读取数据了,但是如果要实现是父子进程通信的话...进程可以调用进程创建函数CreateProcess()生成进程。...(如果是进程从子进程读取数据,那么由子进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()将数据写入到管道。...当进程进程发送数据时,用SetStdHandle()将 管道读句柄赋予标准输入句柄(这样就不会从标准输入读入数据,而从读句柄所表示位置读取数据);在从子进程接收数据时,则用SetStdHandle...然后,进程可以调用进程创建函数CreateProcess()生成进程

3.7K10

linux系统编程之进程(四):waitwaitpid函数与僵尸进程、fork 2 times

一、僵尸进程 当子进程退出时候,内核会进程发送SIGCHLD信号,子进程退出是个异步事件(子进程可以在进程运行任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,...如果不想让进程挂起,可以在进程中加入一条语句:signal(SIGCHLD,SIG_IGN);表示进程忽略SIGCHLD信号,该信号是子进程退出时候进程发送。...函数原型 pid_t wait(int *status) 函数参数 status:该参数可以获得你等待子进程信息 返回: 成功等待子进程,  函数返回等待子进程ID wait系统调用会使进程暂停执行...返回是子进程PID,它通常是结束进程 状态信息允许进程判定子进程退出状态,即从子进程main函数返回或子进程中exit语句退出码。...返回:如果成功, 返回等待子进程ID,失败返回-1 对于waitpidp i d参数解释与其有关: pid == -1 等待任一子进程

3.1K70

Linux匿名管道及实例

父子进程间管道读写 进程利用管道进程发送消息,使用pipe函数建立管道,使用fork函数创建子进程,在进程中维护管道数据方向,并在进程进程发送消息,parent_pipe_child.c...上述程序使用pipe加fork组合,实现进程到子进程通信,程序在进程段中关闭了管道读出端,并相应地在子进程中关闭了管道输入端,从而实现数据从父进程流向子进程。...上述程序中进程分别建立了两个子进程,在子进程1中关闭了管道读出端,在子进程2中关闭了管道输入端,并在进程中关闭了管道两端,从而构成了从子进程1到子进程2管道。...另外,程序中进程创建第1个子进程时并没有关闭管道两端,而是在创建第2个子进程时才关闭管道,这是为了在创建第2个进程时,子进程可以继承存活管道。... #include int main () { pid_t fpid; //fpid表示fork函数返回 int count=0;

2.3K30

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

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

13810

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

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

70620

不存在好叭~

客户端本地DNS服务器发送一个DNS请求,询问"www.server.com"IP地址。...如果本地DNS服务器缓存中没有"www.server.com"IP地址,它会根域名服务器发送请求,询问该域名顶级域名服务器地址。...子进程从fork调用位置开始执行,而进程和子进程在fork调用之后代码处继续执行。资源继承:子进程继承了进程大部分资源,包括打开文件、文件描述符、信号处理器等。...内存独立:进程和子进程拥有独立虚拟内存空间,每个进程都有自己内存映射表。子进程通过写时复制(copy-on-write)机制与进程共享物理内存,只有在需要修改内存内容时才会进行复制。...父子关系判断:进程可以通过fork返回来判断是否为子进程。具体地,进程fork返回子进程PID,而子进程fork返回0。这样可以根据返回不同,在父子进程中执行不同逻辑。

11700

第十五章 Python多进程与多线程

name 进程名字 is_alive() 返回进程是否存活 daemon 进程守护标记,一个布尔 pid 返回进程ID exitcode 子进程退出状态码 terminate() 终止进程。...相反是乱序。因此join()方法是堵塞进程,要等待当前子进程执行完后才会继续执行下一个子进程。否则会一直生成进程去执行任务。 在要求输出情况下使用join()可保证每个结果是完整。...3个子进程,通过循环执行8次worker函数,进程池会从子进程1开始去处理任务,当到达最大进程时,会继续从子进程1开始。...例如:一个子进程队列写数据,一个子进程读取队列数据 #!...Python多进程是复制进程资源,互不影响,有各自独立GIL锁,保证数据不会混乱。能用多进程就用吧!

73610

redis全面总结

进程fork后,bgsave命令返回"backgroud saving started"信息并不再阻塞进程,并可以相应其他命令 子进程创建RDB文件,根据进程内存快照生成临时文件,完成对原来文件替换...子进程发送信号给进程表示完成,进程更新统计信息 AOF运行原理 开启AOF,需要在配置文件中配置appendonly yes,而AOF执行流程包括下面三种 命令追加,将redis写命令追加到缓冲区...redis进程判断是否存在bgsave/bgrewriteaof进程,如果存在就直接返回, 进程fork出子进程,这个过程进程阻塞 进程fork后,bgrewriteaof命令就返回"Background...append only file rewrite started",此时进程不在阻塞,同时redis客户端写命令写入AOF缓存区,并根据同步策略同步到旧AOF文件 在上图中3.2步骤,在子进程生成...时候会阻塞主进程,子进程硬盘写数据会带来Io压力,AOF持久化,硬盘写数据频率越大,IO压力更大,甚至导致AOF阻塞问题, 而在实际场景,根据数据量,应用数据安全要求,预算限制等不同情况,会有各种各样持久化策略

36910

【Linux】进程间通信 --- 管道 共享内存 消息队列 信号量

进程某个子进程发送command code时,也就是对应命令码,每个命令码对应一个需要子进程完成任务,当进程发送command code时候,其他未接收到命令码进程则一直进行阻塞等待即可...下面是进程发送任务代码,我们该怎么给具体一个子进程发送任务呢?...为了增加生成随机随机性,我们又设置了随机生成种子srand,因为rand()生成随机数并不是真正随机序列,而是通过某种算法得到随机数,所以我们又搞出来srand(),并且加了time...(nullptr)时间戳,又加了一堆异或运算,模运算等等,瞎加了一堆运算,让随机数种子更为随机一些,这样保证rand()生成数字序列是真的较为随机数字序列。...四、System V 消息队列(了解) 1.消息队列提供了一个从一个进程另外一个进程发送一块数据方法 2.每个数据块都被认为是有一个类型,接收者进程接收数据块可以有不同类型 3.IPC资源必须删除

1.2K40

这篇Redis文章,图灵看了都说好

,并可以响应其他命令; 子进程进程对内存数据生成快照文件; 子进程发送信号给进程表示完成,进程更新统计信息。...内核只为新生成进程创建虚拟空间结构,它们来复制于进程虚拟究竟结构,但是不为这些段分配物理内存,它们共享进程物理空间,当父子进程中有更改相应段行为发生时,再为子进程相应段分配物理空间; AOF...3.2 由于fork操作运用写时复制技术,子进程只能共享fork操作时内存数据由于进程依然响应命令,Redis使用“AOF”重写缓冲区保存这部分新数据,防止新AOF文件生成期间丢失这部分数据。...5.1 新AOF文件写入完成后,子进程发送信号给进程进程更新统计信息。 5.2 进程把AOF重写缓冲区数据写入到新AOF文件。...服务器运行ID(runid) 每个Redis节点(无论主从),在启动时都会自动生成一个随机ID(每次启动都不一样),由40个随机十六进制字符组成;runid用来唯一识别一个Redis节点。

66581

Redis-面试

ZSet:带权无序集合,即每个ZSet元素还另有一个数字代表权,集合通过权进行排序。...每个哨兵每10秒主服务器,slave和其他哨兵发送ping。 客户端通过哨兵,由哨兵提供可供服务redis master节点。 哨兵只需要配master节点,会自动寻找其对应slave节点。...其具体过程为: 判断此时有没有子进程用于RDB,有的话直接返回。 redis进行fork子进程过程,此时进程处于阻塞状态。...子进程创建RDB文件,完成后返回给进程 简述Redis自动触发RDB机制 通过配置文件,设置一定时间后自动执行RDB 如采用主从复制过程,会自动执行RDB Redis执行shutdown时,在未开启AOF...性能更高:进程在保存rdb时候只需要fork一个子进程,无需进程进行其他io操作,也保证了服务器性能。 缺点: 故障丢失,耐久性差。

28530

Linux Shell函数返回

获取函数返回通过调用函数,或者最后执行获得。 另外,可以直接用函数返回用作if判断。 注意:return只能用来返回整数值,且和c区别是返回为正确,其他为错误。...笔者认为,之所以return语句没有直接返回,是因为return语句是在管道中执行,管道其实是另一个子进程,而return只是从子进程中返回而已,只是while语句结束了。...而函数体之后语句会继续执行。 同理,全局变量在子进程中进行了修改,但是子进程修改没有办法反应到进程中,全局变量只是作为一个环境变量传入子进程,子进程修改自己环境变量,不会影响到进程。...3) echo 返回 其实在shell中,函数返回有一个非常安全返回方式,即通过输出到标准输出返回。因为子进程会继承进程标准输出,因此,子进程输出也就直接反应到进程。...= 0 result = 0 have yxb, result is 0 这个方式虽然好使,但是有一点一定要注意,不能标准输出一些不是结果东西,比如调试信息,这些信息可以重定向到一个文件中解决,

8.8K20

如何使用 Python 多处理模块

Multiprocessing 是一个使用类似于线程模块 API 支持生成进程包。多处理包提供本地和远程并发,通过使用子进程而不是线程有效地回避全局解释器锁。...I'm process 144112 正如您所看到,任何正在运行 Python 脚本或程序都是它自己一个进程。 创建子进程 那么在进程生成不同进程又如何呢?...创建各种子进程 如果要生成多个进程,可以利用 for 循环(或任何其他类型循环)。它们将允许您创建对所需流程尽可能多引用,并在稍后阶段启动/加入它们。 #!...此参数允许您将传递给子进程以在函数内部使用。但你知道如何从子进程返回数据吗? 您可能会认为,要从子级返回数据,必须使用其中 return 语句才能真正检索数据。...原因是,默认情况下,子进程内发生任何异常将始终由生成 Process 类处理。 下面的代码引发带有文本异常: #!

16920

作者学习完《浏览器基本原理与实践》后 36 点总结

建立 TCP 连接后,浏览器就可以和服务器进行 HTTP 数据传输了,首先会服务器发送请求行,然后以请求头形式发送一些其他信息,如果是 POST 请求还会发送请求体; 服务器处理请求。...首先服务器会返回响应行,随后,服务器浏览器发送响应头和响应体。...、更新状态 渲染进程准备好后,浏览器渲染进程发起“提交文档”消息,渲染进程接收到消息和网络进程建立传输数据“管道” 渲染进程接收完数据后,浏览器发送“确认提交” 浏览器进程接收到确认消息后 engine...iframe 进程内容,因此无法攻击其他站点; HTTPS:让数据传输更安全 在 TCP 和 HTTP 之间插入一个安全层,所有经过安全层数据都会被加密或者解密; 对称加密:浏览器发送加密套件列表和一个随机数...client-random 和 service-random 过程都是明文,黑客可以拿到协商加密套件和双方随机数,生成密钥,数据可以被破解; 非对称加密:浏览器发送加密套件列表给服务器,服务器选择一个加密套件

1.1K10

字节都到三面了,结果还是凉了。。。

如果证书没有问题,客户端会从数字证书中取出服务器公钥,然后使用它加密报文,服务器发送如下信息: (1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。...TLS 握手; 在客户端与中间人进行 TLS 握手过程中,中间人会发送自己公钥证书给客户端,客户端验证证书真伪,然后从证书拿到公钥,并生成一个随机数,用公钥加密随机发送给中间人,中间人使用私钥解密...在中间人与服务端进行 TLS 握手过程中,服务端会发送从 CA 机构签发公钥证书给中间人,从证书拿到公钥,并生成一个随机数,用公钥加密随机发送给服务端,服务端使用私钥解密,得到随机数,此时双方都有随机数...这样一来,子进程就共享了进程物理内存数据了,这样能够节约物理内存资源,页表对应页表项属性会标记该物理内存权限为只读。...不过,当进程或者子进程这个内存发起写操作时,CPU 就会触发写保护中断,这个写保护中断是由于违反权限导致,然后操作系统会在「写保护中断处理函数」里进行物理内存复制,并重新设置其内存映射关系,将父子进程内存读写权限设置为可读写

17410
领券