c - 为什么 _execv 将进程置于 Windows 的后台?
问题描述
考虑这个包装器:
/*
build using
x86_64-w64-mingw32-gcc -o ping_wrapper.exe ping_wrapper.c
*/
#include <process.h>
#define REAL_EXECUTABLE "C:\\Windows\\SysWOW64\\PING.EXE"
int main(int const argc, char const * argv[])
{
argv[0] = REAL_EXECUTABLE;
_execv(REAL_EXECUTABLE, argv);
abort();
}
现在,如果我从命令行运行C:\Windows\SysWOW64\PING.EXE
,我会收到使用消息和随后的echo %ERRORLEVEL%
打印 1,因为我遇到了使用错误。
但是,如果我运行它ping_wrapper.exe
,我必须在使用消息之后按 Enter 并随后echo %ERRORLEVEL%
打印 0。
如果我 ping 也是一样1.1.1.1
:当我按 Ctrl-C 时,原件让我回到提示符,但包装器需要 Enter。
此外,如果我在批处理文件中使用包装器,则包装器在后台运行。(脚本继续,无需等待包装器退出。)
我原以为包装器的行为与原始包装器完全相同。Unix' 就是这种情况execv
。这里发生了什么?
解决方案
推荐阅读
- android - BufferQueueProducer:[SurfaceTexture-1-12105-10] 断开连接:未连接(req=1)
- html - 如何为更多应用(例如 Google 主页)构建 9 框图标
- python - 不同列的总和
- python - 在刻面图上绘制参考线
- xml - 如何使用 sed 仅替换特定 xml 块内的文本?
- python - Selenium 错误即“selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互”
- sql - mysql表中两列之间的公共值
- arrays - 在数组字段(可变长度)上应用 Udf 并将其拆分为 pyspark 中的列
- git - 如何通过终端创建拉取请求?
- node.js - 为什么我的 django html 页面上没有显示我的 API 数据?