fork后execv在执行目标程序时与parent进程通信

After fork, execv communicates with the parent process when executing the target program

我知道在fork的child进程中调用execv时不能继承signal handler,所以想知道execv进程是否可以通过管道与parent进程通信。 据我所知,管道通信需要 parenthood 或共同的祖先。但是我不知道管道机制在execv中是否仍然有效。

这是我正在尝试做的事情: 在目标程序 execv 中包含一个断点信号 execute.Is 我可能希望能够在触发断点时告诉 parent 处理此消息?我能用它做什么?

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

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

execve() does not return on success, and the text, data, bss, and stack of the calling process are overwritten by that of the program loaded. The program invoked inherits the calling process's PID, and any open file descriptors that are not set to close on exec. Signals pending on the calling process are cleared. Any signals set to be caught by the calling process are reset to their default behaviour. The SIGCHLD signal (when set to SIG_IGN) may or may not be reset to SIG_DFL.

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