【问题标题】:How to duplicate current process?如何复制当前进程?
【发布时间】:2012-09-30 19:31:11
【问题描述】:

复制当前进程以在 Windows 中生成另一个实例的最简单方法是什么?我知道 Linux 有 fork(),但我只需要再次在同一个进程中运行 main,可能使用带有正确参数的 CreateProcess()

【问题讨论】:

  • system(argv[0])? :D(如果我的意图是正确的。)
  • 如果我从WinMain 运行会怎样?我可以简单地拆分lpCmdLine 并运行system,还是需要在控制台子系统中?不,我意识到它不起作用,因为我不想显示任何控制台窗口。
  • 调用GetCommandLine并将其传递给CreateProcess

标签: c++ windows fork duplication


【解决方案1】:

正如@DavidHeffernan 评论的那样:

STARTUPINFO si;
::memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
::CreateProcess(NULL, ::GetCommandLine(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

【讨论】:

    【解决方案2】:

    Cygwin implements fork() 在其托管环境中,但即使这样也是让孩子赶上父母以准确复制 POSIX 行为的复杂广场舞。

    看来你不需要模仿fork(),而是fork()/exec()。为此,收集环境变量、程序参数并将它们传递给CreateProcess() 就足够了。也有将文件描述符复制到孩子的选项。见CreateProcessdocumentation

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 2019-11-10
      • 1970-01-01
      • 2010-12-30
      • 2016-05-08
      • 1970-01-01
      • 2016-09-03
      • 2013-12-04
      • 1970-01-01
      相关资源
      最近更新 更多