首页 > 解决方案 > 为什么 _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。这里发生了什么?

标签: ccmdmingwexecerrorlevel

解决方案


推荐阅读