首页 > 解决方案 > fork后,execv在执行目标程序时与父进程通信

问题描述

我知道在fork的子进程中调用execv时不能继承信号处理程序,所以我想知道execv进程是否可以通过管道与父进程通信。据我所知,管道通信需要父母身份或共同祖先。但是我不知道管道机制在execv中是否仍然有效。

这就是我想要做的:在目标程序 execv 中包含一个断点信号将执行。我是否可能希望能够在触发断点时告诉父进程这条消息?我能用它做什么?

标签: c++forkexecv

解决方案


我不确定我是否完全理解你的问题,但我认为你正在尝试在子进程中设置信号处理程序,然后调用execv,你的信号处理程序仍然准备好?

你不能。调用execv时,调用进程被执行的程序替换。默认情况下会保留您的文件描述符操作,因此您可以通过管道将stdoutstderr传输到您想要的任何位置(文件、父标准输入、...),但其他所有内容都会被擦除。

execve() 成功时不返回,调用进程的文本、数据、bss 和堆栈被加载的程序覆盖。被调用的程序继承调用进程的 PID,以及任何未设置为在 exec 上关闭的打开文件描述符。调用进程上未决的信号被清除。任何设置为被调用进程捕获的信号都将重置为其默认行为。SIGCHLD 信号(当设置为 SIG_IGN 时)可能会或可能不会重置为 SIG_DFL。

编辑:所以阅读你的问题的历史(你为什么编辑它?我更清楚,imo)。但是你应该看看ptrace系统调用(在linux上,不知道windows上的等价物)


推荐阅读