c++ - fork后,execv在执行目标程序时与父进程通信
问题描述
我知道在fork的子进程中调用execv时不能继承信号处理程序,所以我想知道execv进程是否可以通过管道与父进程通信。据我所知,管道通信需要父母身份或共同祖先。但是我不知道管道机制在execv中是否仍然有效。
这就是我想要做的:在目标程序 execv 中包含一个断点信号将执行。我是否可能希望能够在触发断点时告诉父进程这条消息?我能用它做什么?
解决方案
我不确定我是否完全理解你的问题,但我认为你正在尝试在子进程中设置信号处理程序,然后调用execv
,你的信号处理程序仍然准备好?
你不能。调用execv
时,调用进程被执行的程序替换。默认情况下会保留您的文件描述符操作,因此您可以通过管道将stdout或stderr传输到您想要的任何位置(文件、父标准输入、...),但其他所有内容都会被擦除。
execve() 成功时不返回,调用进程的文本、数据、bss 和堆栈被加载的程序覆盖。被调用的程序继承调用进程的 PID,以及任何未设置为在 exec 上关闭的打开文件描述符。调用进程上未决的信号被清除。任何设置为被调用进程捕获的信号都将重置为其默认行为。SIGCHLD 信号(当设置为 SIG_IGN 时)可能会或可能不会重置为 SIG_DFL。
编辑:所以阅读你的问题的历史(你为什么编辑它?我更清楚,imo)。但是你应该看看ptrace
系统调用(在linux上,不知道windows上的等价物)
推荐阅读
- apache-spark - 无法从 spark scala 应用程序中的 kafka 流中读取 AVRO 数据
- telegram - 在我点击 bot telethon 电报中的按钮后发送 x 照片
- python - 如何修复 jupyter notebook 中的内核错误?
- octave - cell2mat 产生错误的输出大小
- css - 如何使用 webgpu 上下文禁用画布上的过滤
- spring-boot - 在基于 Axon 的 Spring Boot 微服务中未触发使用 @EventHandler 注释的方法
- r - 如何在 R 版本 4.0.1 中进行 Little 的 MCAR 测试?
- docker - 使用 Docker Compose 的未定义卷
- bash - Dockerfile mkdir 权限被拒绝
- c# - Xamarin Forms - 在运行时翻译抽屉菜单项