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

如何在父进程中读取(外部)进程标准输出和标准错误输出结果

它是我们启动进程时,控制进程启动方式参数。...我们之后将hWrite交给我们创建进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取进程写入管道内容。...si.cb = sizeof(STARTUPINFO); GetStartupInfo(&si); si.hStdError = hWrite; // 把创建进程标准错误输出重定向到管道输入...设置标准输出和标准错误输出句柄 si.hStdError = hWrite; // 把创建进程标准错误输出重定向到管道输入 si.hStdOutput = hWrite...我想应该有人借用过网上相似的代码,但是却发现一个问题,就是读取出来信息是不全。这个问题关键就在读取方法,其实没什么玄妙,只要控制好读取起始位置就行了。

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

    Windows内核之进程终止和进程

    它做事情: 全部打开句柄被关闭 全部线程会被终止 进程对象状态变为终止,满足全部等待进程结束线程 进程中全部线程对象状态变为终止,满足全部等待线程结束线程 ...进程终止状态由STILL_ACTIVE变为了进程返回代码 这个函数是异步,它告诉操作系统,你要终止某个进程,可是当函数返回时候,你无法保证进程是否已经被杀死,假设想要确切知道进程是否被杀死...2 进程终止时情况 进程中全部剩余线程将被终止 进程中指定用户对象,GDI对象被释放,内核对象被关闭 内核对象状态编程收到通知状态 进程退出代码由STILL_ACTIVE...3 进程 程序中要实现一段功能一共同拥有3种方法: 调用函数 开辟新线程 开辟新进程 3.1 调用函数 调用函数时很常见,可是它缺点是由于在同一个线程中...3.3 开辟进程 这样有点是既能够保护数据,能够同步运行,也能够等待新进程运行完成再去运行其它进程代码。缺点是开辟新进程,会造成地址空间浪费。

    1.7K20

    关于父进程进程关系(UAC 绕过思路)

    假设是a进程创建了b进程,那么a进程就是b进程进程。...UAC(user account control),这里科普下UAC功能,事实UAC就是大家常见安装软件或者启动程序时候出现全屏变暗一个提示框,这里顺便提醒下大家不要把它提醒级别减少。...IceSworld,Process Explorer等) 查看时,会发现提权进程进程是创建它进程,这是由于AIS利用了CreateProcessAsUser() API中一个新功能,这里新功能就是将提权进程进程设置成创建该进程进程...这里事实是高兴太早。由于道高一尺。魔高一丈,要想真正搞清楚原理,还是继续往下看吧,这个新功能须要哪里查?...事实在MSDN中还有个函数PsSetCreateProcessNotifyRoutine(), 这个函数就是设置监控回调函数,而且接受一个指向PS_CREARTE_NOTIFY_INFO结构指针,

    1.6K30

    深入理解Node.js进程进程

    捕获了错误信息,并且进程以0退出。开发者可以在 uncaughtException 事件中,清除一些已经分配资源(文件描述符、句柄等),不推荐在其中重启进程。...本文从以下几个方面介绍 child_process 模块使用:创建进程父子进程通信独立进程进程管道创建进程nodejs child_process 模块创建进程方法:spawn, fork...ChildProcess 对象,监听其 message 事件,来接受进程消息;调用 send 方法,来实现 IPC。...如果想让父进程先退出,不受到进程影响,那么应该:调用 ChildProcess 对象unref()options.detached 设置为 true进程 stdio 不能是连接到父进程main.js...这意味着可以通过监听其 data事件,在父进程中获取进程 I/O 。

    1.9K21

    socketPass错误

    在 Python socket 编程中,Pass 错误并不是一种标准错误类型。...为了更好地帮助大家理解和调试 socket 相关错误,我将分几种常见错误场景来讨论,并提供解决方案:背景正在编写一个通用Client-Server socket程序,其中Client向Server...但是,如果在执行命令时发生错误,需要能够通知Client错误。知道可以发送字符串“ERROR”或可能是-1之类字符串,但这些字符串也可能是命令输出一部分。...有没有更好方法通过socket发送错误或异常。解决方法使用错误代码此方法适用于需要将错误代码发送到客户端并在客户端中使用该代码来确定错误情况情况。...使用 pass 忽略错误会隐藏潜在问题。要有效调试:确保正确处理所有可能异常。不要使用 pass 忽略重要错误信息。打印或记录详细错误信息,便于诊断问题。

    8610

    C语言Linux系统编程-等待终止进程(僵死进程

    1.等待终止进程(僵死进程): 如果一个进程在父进程之前结束,内核会把子进程设置为一个特殊状态,处于这种状态进程称为僵死进程 当父进程获取了进程信息后,进程才会消失。...pid_t wait(int *status); 父进程调用这个方法会被阻塞住,如果子进程终止时候,此方法会调用并且返回终止进程pid #include #include <unistd.h...,pid=%d , ppid=%d ,我新建进程pid=%d\n",pid,ppid,ret); int status; int sonPid...,pid=22315 , ppid=12479 ,我新建进程pid=22316 我是进程,pid=22316 , ppid=22315 我进程,pid=22316,终止了 2.如果父进程进程之前终止了...,那么系统会把子进程设置给init进程(pid为1),init进程会周期性等待所有的进程,确保没有长时间僵死进程

    3.5K20

    Golang杀死进程三种方式

    前言熟悉Golang语言小伙伴一定都知道,杀死进程有三种方式,今天就来简单介绍一下。...它们都是通过向进程发送信号方法来关闭进程。一、cmd.Process.Kill()cmd.Process.Kill() 是 os/exec 包中一个方法,用于终止一个进程及其所有进程。...二、syscall.Killsyscall.Kill 是一个系统调用函数,用于向进程发送信号。它可以向指定进程进程组发送信号,可以使用负进程 ID 来发送信号给进程组或进程组及其所有进程。...需要注意是,syscall.Kill 函数需要提供正确进程 ID,可以通过 cmd.Process.Pid 来获取已启动进程进程 ID。...需要注意是,cmd.Process.Signal 方法也需要提供正确进程 ID,可以通过 cmd.Process.Pid 来获取已启动进程进程 ID。

    1.5K00

    OpenProcess打开进程返回错误问题

    回头一查MSDN,人家已然说明:当OpenProcess()给定进程ID为0时,该函数会失败并且GetLastError()返回错误代码是ERROR_INVALID_PARAMETER。...另外还说明了,当给定进程是空闲进程(Idle Process)或CSRSS进程之一时,GetLastError()返回错误代码是ERROR_ACCESS_DENIED,其值为5....出于系统安全性考虑,操作系统禁止用户层代码打开这些进程。       显然,错误很明显了。我并没有过滤这些特殊进程,而是一股脑全部调用OpenProcess()打开进程。...而刚好,我系统上第一个遍历进程就是System Process(进程ID为0)。于是程序直接跳出了而得不到任何结果。...另外,我系统是Windows 7 64位系统,网上有人说在Windows XP系统不会出现这种错误,不知道真假。

    3.3K100

    Linux 创建进程执行任务实现方法

    通常将原有的进程称为父进程,把新创建进程称为进程进程是父进程一个拷贝,进程获得同父进程相同数据,但是同父进程使用不同数据段和堆栈段。...在父进程中返回时返回值为进程 PID,而在进程中返回时返回值为 0,并且返回后都将执行 fork 函数调用之后语句。如果 fork 函数调用失败,则返回值为 -1。...为了防止父进程重写进程需要数据,父进程会被 vfork 调用阻塞,直到进程退出或执行一个新程序。...exec 族函数 使用 fork/vfork 创建进程后执行是和父进程相同程序(但有可能执行不同代码分支),进程往往需要调用一个 exec 族函数以执行另外一个程序。...调用这样函数时,可以由用户自行设定子进程环境变量,存放在参数 envp 所指向字符串数组中。 事实,只有 execve 是真正系统调用,其它五个函数最终都调用 execve。

    3.8K11

    2018年swoole实战7-进程详解创建进程调用外部程序查看进程树多进程实战案例

    继上篇 2018年swoole实战6-异步redis 本篇演示 swoole进程管理模块 创建进程 新建 process.php <?...PHP_EOL; // 进程id swoole_process::wait(); http_server.php <?...通过 pstree 工具可以查看相关进程关系 brew install pstree # mac 安装 pstree ps aux | grep process.php # 获取进程id pstree...-p 69932 # 显示进程树 多进程实战案例 如果用php去抓取网页内容,传统方式是用一个for循环,将url逐个遍历,假设每个url耗时1秒,6个url就需要耗时6s,这种方式效率太低了。...通过swoole进程管理模块,我们可以实现多进程抓取内容,每个进程对应负责一个url,从而实现1秒完成抓取任务 新建 process_curl.php <?

    57720

    python中subprocess

    python2.7 源码中注释(由于能力有限,翻译不太准确): 这个模块允许您开启进程、连接输入、输出和错误管道,并获取他们返回代码。...程序通常执行序列或字符串第一项,但可以通过使用明确参数进行设置。 在UNIX,shell = False(默认):在这种情况下,Popen类使用os.execvp()来执行程序进程。...PIPE创建一个新管道。None,没有重定向;管道将会继承父管道文件句柄。此外,标准错误可以用STDOUT来定义,表明应用程序应该从STDOUT捕获到相同文件句柄标准错误数据。...如果 cwd 不为None,进程将在执行前切换到 cwd指定目录 如果 env 不为空,为新进程定义环境变量 如果 universal_newlines 为 True, 则文件对象标准输出、标准错误输出以文本文件形式打开...参数是PIPE , 这个属性是提供错误输出到进程一个文件对象,否则为None pid     进程PID returncode     进程返回码。

    1.6K30

    linux 操作系统进程调度() -- 进程调度算法演进

    引言 一篇文章中,我们介绍了内核调度基本概念,知道了调度器设计中最核心两个指标 -- 周转时间与响应时间: linux 操作系统进程调度() -- 进程调度基本概念 本文,我们就继续顺着上文思路...SJF 算法理想虽然很美好,但在实际系统执行过程中,却往往存在着两个致命问题: 在进程执行过程中,新任务随时都有可能到来,如果任务不是同时到来,那么 SJF 算法事实就退化成了 FCFS 算法...多级反馈队列 MLFQ 针对 RR 算法存在问题,结合我们一篇文章中介绍 IO 密集型与 CPU 密集型进程区别: IO 密集型:频繁 IO,但占用 CPU 时间不多; CPU 密集型:进程执行过程中很少执行...从这三条原则,我们看出,操作系统必须在运行过程中区分一个进程究竟是 IO 密集型还是 CPU 密集型,并且在正确区分它们基础,需要增加优先级概念,从而让 IO 密集型进程更为优先和频繁地被分配到 CPU...由于 IO 密集型任务具有更高优先级,那么进程编写者可能会通过故意进行 IO 操作来骗取操作系统误判,从而将本是 CPU 密集型任务被故意包装成 IO 密集型任务,进而被错误地优先调度。

    1.8K10

    Python守护进程daemon实现

    总之,除开这些特殊性以外,守护进程与普通进程基本没有什么区别。因此,编写守护进程实际是把一个普通进程按照上述守护进程特性改造成为守护进程。.../shell命令启动守护进程时,父进程终止会让shell认为此命令已经执行完毕,而且,这也使进程获得了一个新进程ID。...7、忽略SIGCHLD信号    这一步并非必须,只对需要创建进程守护进程才有必要,很多服务器守护进程设计成通过派生子进程来处理客户端请求,如果父进程不对SIGCHLD信号进行处理的话,进程在终止后变成僵尸进程...8、用日志系统记录出错信息    因为守护进程没有控制终端,当进程出现错误时无法写入到标准输出上,可以通过调用syslog将出错信息写入到指定文件中。..._exit(1) # 进程, 由于父进程已经退出,所以进程变为孤儿进程,由init收养 '''setsid使进程成为新会话首进程,和进程组长,与原来进程组、控制终端和登录会话脱离

    7.5K30

    python守护进程

    重定向孙子进程标准输入流,标准输出流,标准错误到/dev/null 完成上面的4个步骤,那么最终孙子进程就称为守护进程,先看下代码,后面分析下步骤原因。 #!... = os.fork() if pid > 0:sys.exit(0) except OSError,error: print 'fork' sys.exit(1)   #修改进程工作目录...2.修改进程工作目录 进程在创建时候会继承父进程工作目录,如果执行程序是在U盘里面,就会导致U盘不能卸载。...3.创建新会话 使用setsid后,进程就会成为新会话进程进程会成为新进程组长进程进程没有控制终端。...为了避免这个问题,fork孙子进程处理, 6.重定向孙子进程标准输入流,标准输出流,标准错误流到/dev/null 因为是守护进程,本身已经脱离了终端,那么标准输入流,标准输入流,标准错误流就没有什么意义了

    1K20

    【Linux】进程与可执行程序关系&&fork创建进程&&写实拷贝理解

    我们也可以看到,其中父子进程fork返回值是不一样,父进程fork返回进程pid,进程返回是0。 那这里就会有疑问了,为什么fork给父进程返回进程pid,给进程返回0?...原因是在进程中,一个父进程可能会有多个子进程,父进程想要管理进程必须通过进程标识符,所以父进程必须知道子进程标识符,而进程只需要关心自己是否成功创建了,所以返回0。...创建一个进程时候,系统中就会多一个进程,当进程创建时,系统就必须为进程创建出一个全新PCB(task_struct),父进程会把自己PCB中很多内容拷贝给进程PCB,也就是说,进程被创建,...上面说到父子进程共享代码和数据,当父子进程任意一方要对数据进行修改时,都可能会对另一方造成影响,上面又说到任意进程之间是具有独立性,不会互相影响,那么这时操作系统就会介入,将要修改数据给进程(以进程修改数据为例...)拷贝一份,让进程修改拷贝这一份数据,进程也不再指向原来那一份数据,而是指向修改拷贝这一份数据。

    18010

    L010Linux和androidNDK之linux避免僵尸进程进程退出处理

    L010Linux和androidNDK之linux避免僵尸进程进程退出处理 如果你在程序中fork出一个进程,没有好好处理进程退出后相关事宜,那么就有可能召唤出传说中进程僵尸---僵尸进程...异步回收僵尸进程: fork()之后,进程从父进程获取了一份拷贝,和父进程分别独立运行,僵尸进程产生是因为父进程没有给进程“收尸”造成,又可以根据危害程度分为下述两类: 总体来说:当进程结束之后...进程结束状态值会由参数 status 返回, 而进程进程识别码也会一起返回。如果不在意结束状态值,则 参数 status 可以设成 NULL。...参数 pid 为欲等待进程识别码, 其他数值意义如下: pid<-1 等待进程组识别码为 pid 绝对值任何进程。 pid=-1 等待任何进程,相当于 wait()。...pid=0 等待进程组识别码与目前进程相同任何进程。 pid>0 等待任何进程识别码为 pid 进程

    3.1K40

    python 守护进程(daemon)

    守护进程编写步骤: 1、fork进程,然后父进程退出,此时进程会被init进程接管。 2、修改进程工作目录,创建新进程组合新会话,修改umask。...3、进程再次fork一个进程,这个进程可以称为孙子进程,然后进程退出。 4、重定向孙子进程标准输入流,标准输出流,标准错误到/dev/null #!...2.修改进程工作目录 进程在创建时候会继承父进程工作目录,如果执行程序是在U盘里面,就会导致U盘不能卸载。...3.创建新会话 使用setsid后,进程就会成为新会话进程进程会成为新进程组长进程进程没有控制终端。...,fork孙子进程处理, 6.重定向孙子进程标准输入流,标准输出流,标准错误流到/dev/null 因为是守护进程,本身已经脱离了终端,那么标准输入流,标准输入流,标准错误流就没有什么意义了,所以都转向到

    1.1K30
    领券