【问题标题】:Linux/OSX/Windows - Waiting end of processLinux/OSX/Windows - 等待进程结束
【发布时间】:2016-01-19 11:10:14
【问题描述】:

在 OSX 下,有“open -W”允许等待可执行文件结束。

windows的等效指令是什么?

Linux 对 sublime-text (subl) 等程序确实具有这种非阻塞行为。它是如何做到的(execv?)

基本上,我正在尝试在 C 程序中启动可执行文件并等待它结束。

【问题讨论】:

  • 我不知道你在说什么。在 Windows 中,父进程完全有可能等待其子进程。
  • open 启动服务以获取相关程序以打开文档。它与运行命令不同。 linux 使用xdg-open 来完成类似的操作,在Windows 命令外壳中,您可以在文档上使用start /wait 之类的东西来获得相同的行为。但是,您的问题确实不足以帮助撰写任何有意义的答案。

标签: linux windows macos pid child-process


【解决方案1】:

通过编辑,在 linux 下,您正在查看:

childpid = fork();
if (childpid) {
    execve("program", argvp, envp);
} else {
    int status;
    pid_t pid = wait(&status);

}

windows下,需要使用CreateProcess创建进程,然后使用WaitForSingleObject等待进程终止;例如

PROCESS_INFORMATION processInformation = {0};
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
bool status = CreateProcess(L"Program", L"args", 0, 0, 0,
    NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, 
    0, 0, &startupInfo, &processInformation);
if (status) {
    WaitForSingleObject(processInformation.hProcess, INFINITE);
}

【讨论】:

    【解决方案2】:

    在 Linux 下,父进程可以通过使用 wait 或 waitpid 系统调用来等待子进程终止。如需更精细的进程同步,请使用信号量。

    【讨论】:

      猜你喜欢
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 2015-10-25
      • 1970-01-01
      • 2012-07-13
      相关资源
      最近更新 更多