【问题标题】:Checking the exit status of subprocesses on Windows在 Windows 上检查子进程的退出状态
【发布时间】:2011-07-28 09:51:56
【问题描述】:

gEDA 中,我们有一个帮助程序,需要创建一个子进程并检查其退出状态以确保它成功完成。在 Linux 上,我们使用类似于:

#include <glib.h>
#include <sys/wait.h>

static gboolean
build_and_run_command (const gchar *format, ...)
{
  int result, status;
  gchar *args, *standard_error;
  GError *error = NULL;

  /* Set up argument variables */

  if (g_spawn_sync (".",
                    args,
                    NULL,
                    G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL,
                    NULL,
                    NULL,
                    NULL,
                    &standard_error,
                    &status,
                    &error)) {
    result = (WIFEXITED (status) && WEXITSTATUS(status) == 0);
  }

  /* Clean up */

  return result;
}

full source code for the program 可以在我们的 git 存储库中找到。

不幸的是,当使用 MinGW 为 Windows 编译时,我们发现 sys/wait.h 不存在,WIFEXITEDWEXITSTATUS 宏也不存在。检查正常退出并使用g_spawn_sync 在 Windows 上检索退出状态的“正确方法”是什么?谷歌出人意料地没有帮助!

【问题讨论】:

  • 不知道为什么你希望 linux 系统头文件首先在寡妇上工作......
  • 我完全不希望在 Windows 上工作,而且我很少感到失望。上面的代码适用于除 Windows 之外的所有东西;我希望有人可以建议如何修改它以支持它。

标签: c windows subprocess glib


【解决方案1】:

g_spawn_async_with_pipes() 的文档解释了如何在 Windows 上执行此操作。

【讨论】:

    【解决方案2】:

    在 Windows API 中,您通常使用 CreateProcess 创建进程。要获取错误代码(或“成功代码”^^),请查看此处:http://msdn.microsoft.com/en-us/library/ms683189%28v=vs.85%29.aspx

    【讨论】:

    • 理想情况下,我想使用 GLib 函数来处理子进程,这样就需要编写尽可能少的不可移植代码。
    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 2015-09-04
    • 2018-06-24
    • 1970-01-01
    • 2015-02-03
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多