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

匿名管道:子进程被杀死时,父进程中的ReadFile会一直等待

匿名管道是一种用于进程间通信的机制,它允许一个进程将数据传输给另一个进程。在Windows操作系统中,匿名管道由一个读取端和一个写入端组成。

当父进程创建一个匿名管道后,它可以通过将写入端传递给子进程来实现进程间通信。子进程可以使用写入端将数据发送给父进程,而父进程可以使用读取端从管道中读取数据。

在这个问答中,当子进程被杀死时,父进程中的ReadFile会一直等待。这是因为ReadFile是一个阻塞操作,它会一直等待直到有数据可读取或者管道被关闭。

对于这种情况,可以通过设置管道的异步读取模式来避免父进程的ReadFile阻塞。通过使用异步I/O操作,父进程可以在等待数据时继续执行其他任务,而不会被阻塞。

腾讯云提供了一系列的云计算产品,其中包括云服务器、云数据库、云存储等。这些产品可以帮助开发者构建和管理云计算基础设施,并提供高可用性、弹性扩展和安全性等特性。

关于匿名管道的具体使用和相关产品,腾讯云提供了云原生容器服务(TKE)和云函数(SCF)等产品,可以帮助开发者在云上快速构建和部署应用程序,并实现进程间通信。您可以通过以下链接了解更多信息:

  1. 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  2. 云函数(SCF):https://cloud.tencent.com/product/scf

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WindowsAPI 之 CreatePipe、CreateProcess

匿名管道主要用于本地进程进程之间通信,在进程的话,首先是要创建一个匿名管道,在创建匿名管道成功后,可以获取到对这个匿名管道读写句柄,然后父进程就可以向这个匿名管道写入数据和读取数据了,但是如果要实现是父子进程通信的话...,那么还必须在进程创建一个进程,同时,这个子进程必须能够继承和使用进程一些公开句柄,因为在进程必须要使用进程创建匿名管道读写句柄,通过这个匿名管道才能实现父子进程通信,所以必须继承进程公开句柄...同时在创建进程时候,必须将进程标准输入句柄设置为进程创建匿名管道得到管道句柄,将进程标准输出句柄设置为进程创建匿名管道得到管道句柄。然后在进程就可以读写匿名管道了。...匿名管道将在读、写句柄都被关闭后退出,也可以在进程调用 CloseHandle()函数来关闭此句柄(个人理解就是,匿名管道,只能是你全部往管道读写完之前,就不能干别的事,只能写或等待管道时候处在等待状态...);而进程在全部接收完管道数据之前也只能读或等待(没数据等待),也不能去干其它事)。

3.6K10

CreatePipe、CreateProcess函数

匿名管道(Anonymous Pipes)是在进程进程间单向传输数据一种未命名管道,只能在本地计算机中使用,而不可用于网络间通信。...第二:匿名管道只能实现进程进程之间通信,而不能实现任意两个本地进程之间通信。...要从管道读取,一个进程在调用ReadFile函数使用读取句柄。当以下任一条件为真ReadFile返回:写操作在管道写入端完成,请求字节数已被读取或发生错误。...当一个进程使用WriteFile写入匿名管道,写操作在所有字节都被写入之前不会完成。...&dwRead, NULL))//这里是读管道,即便已经没有数据,仍然等待接收数据,因为,进程认为进程仍有数据要发送,只是暂时没法送, {

1.1K30

CreatePipe匿名管道通信

在使用匿名管道通信,服务器进程必须将其中一个句柄传送给客户机进程。句柄传递多通过继承来完成,服务器进程也允许这些句柄为进程所继承。...当进程进程发送数据,用SetStdHandle()将管道读句柄赋予标准输入句柄;在从子进程接收数据,则用SetStdHandle()将管道写句柄赋予标准输出(或标准错误)句柄。...如果进程要发送数据到进程进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...在下面将要给出程序示例,将由进程管道服务器)创建一个进程管道客户机),进程回见个其全部标准输出发送到匿名管道进程再从管道读取数据,一直进程关闭管道写句柄。...在本示例,将当前进程标准输出设置为使用匿名管道,再创建进程进程将继承进程标准输出,然后再将进程标准输出恢复为其初始状态。

99810

进程间通信--管道

1.在不关闭写端情况下一直不向管道文件写入,那么读端就会阻塞式读取(一定要读取到数据才会往下继续执行) 2.在不关闭读端情况,一直管道写但不读取,文件缓冲区满以后会一直等待读端来读取 3....4.基于匿名管道简单进程池 设计一个由进程负载均衡式进程装载任务简单进程池: 1.首先要让进程创建一批管道和一批进程,一个管道对应一个进程 2.建立一批任务,将任务装载到一个函数指针数组...return 0; } 写这样代码很容易存在一个这样问题: 因为进程拷贝进程文件描述符表,也就是说当进程创建一个管道文件后,假设写端是3文件描述符,此时我再创建一个进程,此时进程文件描述符表...3也会指向那个管道文件,也就说这个管道文件写端两个进程所指向了,当我关闭进程写端后,我所期望进程读到0,然后退出;但是由于还有其他进程指向这个管道文件,所以该进程无法直接读到0,此时进程就会阻塞式等待读...因为进程具有独立性,所以在进程关闭并不会影响进程。这样就又回到只有一个进程指向管道文件写端,一个进程指向管道文件读端,这时当我关闭进程写端进程就可以通过读到0而退出了。

17430

管道(Pipe)createPipe

匿名管道(Anonymous Pipes)是在进程进程间单向数据传输一种未命名管道,仅仅能在本地计算机中使用,而不可用于网络间通信。...假设进程要发送数据到进程进程可调用WriteFile()将数据写入到管道(传递管道写句柄给函数),进程则调用GetStdHandle()取得管道读句柄,将该句柄传入ReadFile()后从管道读取数据...假设是进程从子进程读取数据,那么由进程调用GetStdHandle()取得管道写入句柄,并调用WriteFile()将数据写入到管道。...然后,进程调用ReadFile()从管道读取出数据(传递管道读句柄给函数)。...匿名管道并不支持异步读、写操作,这也就意味着不能在匿名管道中使用ReadFileEx()和WriteFileEx(),并且ReadFile()和WriteFile()lpOverLapped參数也将被忽略

1.3K10

【操作系统】Windows进程通信

进程是资源申请,高度和独立运行单位,因此,它使用系统运行资源,而程序不能申请使用系统资源,不能系统高度也不能作为独立运行单位,因此它不占系统运行资源。...进程 进程还是一个进程,指的是由另一个进程(对应称之为进程)所创建进程。 单任务同步机制——线程、进程都可以实现。 需要保护地址空间。...进程线程既可以在进程终止之后执行代码,也可以在进程运行过程执行代码。...匿名管道是一个没有命名单向管道,本质上就是一个共享内存,抽象成是管道。...通常用来在进程进程之间通信。只能实现本地两个进程之间通信。不能实现网络通信。 优点是效率高,原理本质上就是共享内存。

76040

管道(CreatePipe)与本地cmd.exe进程通信(附源代码及编译好程序,免费下载)

大家好,又见面了,我是你们朋友全栈君。 简介: 在本地,用进程创建一个cmd.exe进程,这个子进程输入输出重定向到两条匿名管道,从而实现与进程通信。...进程输入命令到一条管道进程读取后执行并输出到另一条管道进程读取后输出到窗口。...CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0))//创建两个匿名管道,以改变DOS标准输入输出 { return -1;...ret=ReadFile(hReadPipe1,Buff,SEND_BUFF_SIZE,&lBytesRead,0);//读取管道数据 //如果读到数据,则对数据进行下一步处理...print(Buff); ZeroMemory(Buff,sizeof(Buff)); } else{ //管道无数据输入命令,以回车结束 char ch

61210

1.6 编写双管道ShellCode

管道创建,操作系统会为管道分配一段内存区域,该内存区域由创建管道进程和与其通信进程共享。当进程管道写入数据,数据会被存储在管道内存缓冲区,然后等待另一个进程管道读取数据。...管道操作标识符是HANDLE句柄,当管道正确创建则,我们可以直接使用ReadFile、WriteFile等文件读写函数来读写它,读者无需了解网络间进程间通信细节部分; 一般匿名管道创建需要调用...如果命名管道为空,则函数阻塞等待数据到来,当接收到数据则读者即可通过调用ReadFile管道读取数据,或调用WriteFile来向管道写入数据,至此关键API函数已经介绍完了; 1.6.2 C...语言实现双管道后门 其实匿名管道反弹CMD工作原理可以理解为,首先攻击机发命令并通过Socket传给目标机进程,目标机进程又通过一个匿名管道传给进程,这里进程是cmd.exe,CMD执行命令后...,把结果通过另一个匿名管道返给进程进程最后再通过Socket返回给攻击机,以此则实现了反弹Shell目的; 接着我们就来实现这个双向匿名管道功能,在实现管道之前需要先建立套接字,首先使用WSAStartup

15730

1.6 编写双管道ShellCode后门

管道创建,操作系统会为管道分配一段内存区域,该内存区域由创建管道进程和与其通信进程共享。当进程管道写入数据,数据会被存储在管道内存缓冲区,然后等待另一个进程管道读取数据。...管道操作标识符是HANDLE句柄,当管道正确创建则,我们可以直接使用ReadFile、WriteFile等文件读写函数来读写它,读者无需了解网络间进程间通信细节部分; 一般匿名管道创建需要调用...如果命名管道为空,则函数阻塞等待数据到来,当接收到数据则读者即可通过调用ReadFile管道读取数据,或调用WriteFile来向管道写入数据,至此关键API函数已经介绍完了; 1.6.2 C...语言实现双管道后门 其实匿名管道反弹CMD工作原理可以理解为,首先攻击机发命令并通过Socket传给目标机进程,目标机进程又通过一个匿名管道传给进程,这里进程是cmd.exe,CMD执行命令后...,把结果通过另一个匿名管道返给进程进程最后再通过Socket返回给攻击机,以此则实现了反弹Shell目的; 接着我们就来实现这个双向匿名管道功能,在实现管道之前需要先建立套接字,首先使用WSAStartup

15320

进程间通信之CreatePipe

管道缓冲空间在写之前已经满了,那么WriteFile将一直不会返回直到ReadFile管道后有足够缓冲空间。 匿名管道是通过命名管道实现。...因此,你可以把匿名管道handle作为命名管道handle使用。 为了释放管道使用资源,应用程序应该关闭那些不再使用handles。 下面是进程代码。...它使用继承标准输入STDIN和输出STDOUT访问进程创建管道进程从in.txt读数据,并把这些数据写到管道1进程管道1通过STDIN获得数据,再通过STDOUT写到管道2。...进程之后再从管道2读取数据并显示。...同时展示了如何通过匿名管道重定向进程标准输入和标准输出。 命名管道同样可以用于进程I/O重定向。

88110

【Linux】匿名管道实现简单进程

一、匿名管道通信四种情况和五种特性 1.1、四种情况 管道内部没有数据且进程不关闭自己写端文件fd,读端(进程)就要阻塞等待,直到管道里有数据。...管道内部写满了且进程(读端)不关闭自己读端fd,写端(进程)写满以后就要阻塞等待。...读端关闭了,操作系统就会发送信号直接杀死进行写入进程,因为没有读端写入也就没有了意义。 1.2、五种特性 管道自带同步机制,参照上面四种情况1,2,3。...具有血缘关系进程进行通信,常见于父子。 管道是面向字节流。 父子进程退出,管道自动释放,因为内存文件生命周期是随进程。  管道只能进行单向通信。...,因为进程在创建进程同时会将进程文件描述符表也给进程拷贝一份, //这样子进程文件描述符表就会保存了之前进程写端文件描述符,必须要把之前进程写端文件描述符关闭

9610

1.6 编写双管道ShellCode后门

管道创建,操作系统会为管道分配一段内存区域,该内存区域由创建管道进程和与其通信进程共享。当进程管道写入数据,数据会被存储在管道内存缓冲区,然后等待另一个进程管道读取数据。...管道操作标识符是HANDLE句柄,当管道正确创建则,我们可以直接使用ReadFile、WriteFile等文件读写函数来读写它,读者无需了解网络间进程间通信细节部分;一般匿名管道创建需要调用CreatePipe...在使用CreatePipe函数创建匿名管道后,读者可以使用WriteFile函数往管道写入数据,也可以使用ReadFile函数从管道读取数据。读取和写入管道操作需要使用相应句柄。...如果命名管道为空,则函数阻塞等待数据到来,当接收到数据则读者即可通过调用ReadFile管道读取数据,或调用WriteFile来向管道写入数据,至此关键API函数已经介绍完了;1.6.2 C语言实现双管道后门其实匿名管道反弹...CMD工作原理可以理解为,首先攻击机发命令并通过Socket传给目标机进程,目标机进程又通过一个匿名管道传给进程,这里进程是cmd.exe,CMD执行命令后,把结果通过另一个匿名管道返给进程

23740

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

匿名管道这里,我们通过fork创建进程,让进程继承进程文件描述符表,这样子进程中会有一个指向匿名管道文件文件描述符,并且进程也会有这样文件描述符,当然是在fork之前,进程要打开一个管道文件...进程等待管道文件,此时PCB会被放在管道文件等待队列,当管道重新出现数据,PCB会被重新投入到运行队列,将数据从内核拷贝到用户层,只要没有数据,该进程就会一直阻塞等待 如果一直不写入,则进程一直阻塞等待...所以我们打印输出status低7位对应数字信号是多少,看他是几号信号杀死。 6. a.写端写慢,读端读很快,则读端阻塞下来,等待写端重新写入数据。...当进程向某个子进程发送command code,也就是对应命令码,每个命令码对应一个需要子进程完成任务,当进程没发送command code时候,其他未接收到命令码进程一直进行阻塞等待即可...他其实是通过继承方式,进程打开一份内核级匿名管道文件,这个内核级文件地址放到文件描述符表里面,此时fork创建进程进程通过自己文件描述符表内核级匿名管道文件地址就可以找到这份公共资源

1.2K40

1.6 编写双管道ShellCode

管道创建,操作系统会为管道分配一段内存区域,该内存区域由创建管道进程和与其通信进程共享。当进程管道写入数据,数据会被存储在管道内存缓冲区,然后等待另一个进程管道读取数据。...管道操作标识符是HANDLE句柄,当管道正确创建则,我们可以直接使用ReadFile、WriteFile等文件读写函数来读写它,读者无需了解网络间进程间通信细节部分;一般匿名管道创建需要调用CreatePipe...在使用CreatePipe函数创建匿名管道后,读者可以使用WriteFile函数往管道写入数据,也可以使用ReadFile函数从管道读取数据。读取和写入管道操作需要使用相应句柄。...如果命名管道为空,则函数阻塞等待数据到来,当接收到数据则读者即可通过调用ReadFile管道读取数据,或调用WriteFile来向管道写入数据,至此关键API函数已经介绍完了;1.6.2 C语言实现双管道后门其实匿名管道反弹...CMD工作原理可以理解为,首先攻击机发命令并通过Socket传给目标机进程,目标机进程又通过一个匿名管道传给进程,这里进程是cmd.exe,CMD执行命令后,把结果通过另一个匿名管道返给进程

31410

进程池设计

通过sendTask函数让进程选择指定进程,写入指定任务码到匿名管道 void sendTask(const SubEp& process, int tasknum) { cout<<.../因为有写实拷贝,所以这里关闭不会影响进程 //因为进程继承进程文件描述符表,所以上一个进程读端对应进程写端这个进程继承下来,即当前进程和上一个进程之间也有匿名管道 //可能导致上一个进程进程读端关闭...当进程在创建2号进程,2号进程也拷贝了一份进程文件描述表,此时表上fd4写端连着1号进程fd3匿名管道,那么2号进程继承下来。...而1号进程读端对应进程写端和2号进程写端,当进程写端关闭匿名管道还与2号进程写端相连,导致1号进程读端不会读到0所以1号进程读端不能正常关闭!...,然后立刻等待回收一个相应进程的话,导致出现该进程读端还有其他进程写端通信着,该进程读端没有读到0导致进程没有正常退出,那么进程也就回收不到进程

34940

Linux进程间通信【匿名管道

、写方式打开匿名管道,此时会分配两个 fd fork 创建进程进程拥有自己进程系统信息,同时会继承原进程文件系统信息,此时进程进程可以看到同一份资源:匿名管道 pipe 因为进程继承了原有关系...,因此此时父子进程对于 pipe 都有读写权限,需要确定数据流向,关闭不必要 fd,比如进程写、进程读,或者进程读、进程写都可以 注意: fork 创建进程后,进程继承原进程文件系统信息...进程需要以读写方式打开匿名管道 pipe,这样子进程在继承,才不会发生权限丢失 创建出匿名管道文件 pipe 虽然属于文件系统,但它是一个特殊文件,一个由 OS 提供纯纯内存文件,不需要将数据冲刷至磁盘...,进程选择某个子进程,并通过匿名管道进程通信,并下达指定任务让其执行 8.1、逻辑设计 首先创建一批进程匿名管道 -> 进程(读端)阻塞,等待写端写入数据 -> 选择相应进程,并对其写入任务编号...,即使用不同匿名管道 创建管道后,需要关闭进程不必要 fd 需要特别注意进程写端 fd 多次继承问题,避免因写端没有关干净,而导致读端持续阻塞 关闭读端对应写端后,读端读到 0,可以借助此特性结束进程运行

19920

进程间通信—管道,共享内存,消息队列,信号量

对代码稍加修改,让进程睡眠50秒图片管道内没有了数据,读端阻塞等待写端可以看到先是进程读到0个字符,然后在等待进程写入。...这种管道里没有了数据,读端在读,默认直接阻塞当前正在读取进程—读端在阻塞等待! 实际上,进程在阻塞等待进程R状态会操作系统改为S状态,进程放到等待队列。...写快读慢当我让进程取消睡眠,一直管道文件里写进程睡眠1000秒即一直睡眠不读取管道数据图片可以看到打印计数器几百次即进程一直在写,而进程没有读取管道文件里是数据,进程(写端)直至写满管道文件才停止图片而当进程睡眠两秒...这里我让写端一直写,读端读了一次然后直接break图片图片在进程休眠2秒期间,进程管道文件里写数据,然后读端读完管道文件里数据后,退出循环当操作系统知道读端退出,而写端还在写以发送信号码给进程方式强制将写端杀掉...当进程创建好管道管道文件操作系统提供,当进程退出管道文件也就被操作系统释放。

1.2K00

17.1 隐藏执行CMD命令

这样就可以通过当前进程输入输出来执行CMD命令并获取命令输出结果。CreatePipe 函数,用于创建一个匿名管道匿名管道是一种用于进程间通信机制,允许一个进程将输出数据传输给另一个进程。...创建匿名管道后,可以使用ReadFile函数从管道读端读取数据,使用WriteFile函数将数据写入管道写端。在使用完管道后,应使用CloseHandle函数关闭管道句柄,以释放资源。...在创建进程,可以通过STARTUPINFO结构体设置进程一些属性,例如标准输入、标准输出和标准错误输出重定向,启动窗口显示方式等。...接着使用 ReadFile() 函数从管道读取端读取输出数据,并将读取到数据存储到一个缓冲区。最后,它将缓冲区内容拼接成一个完整输出结果返回给调用者。...// 创建进程,运行命令,进程是可继承 if (!

33540

僵尸进程问题

在这时候,init进程忽略掉其它所有结束进程,而只等这个特定进程结束。 由一个挂起/etc/inittab文件任务引起问题征兆是:进程为init僵尸进程无限制增长。...在AIX4.3及以后版本,init进程功能增强,用以有效地处理僵尸进程。...该项应在初始化安装结束后自动删除。 (2)PPID不为1 如果进程号不为1,则相应进程应负责收回结束进程。 未收回进程原因之一是shell管道。...系统许多命令都不会产生子进程,这些进程也无法处理那些结束进程。这种情况在一个shell管道中有一个或多个短时进程及一个和多个长时间进程更为明显。一个僵尸进程会在它进程运行期间一直存在。...任何一个程序在产生子进程都应负责在进程结束收回它们。如果程序在编写没有考虑到处理它们产生进程,则该程序存在问题。

2.4K121
领券