C++ System() orphan & zombie process
c++ system() orphan & zombie processes
我有一个小应用程序,我们称之为"launch.exe"。 它是一个 c++ 应用程序。
我在其中所做的是我调用 system() 3 次以启动其他 3 个应用程序。 我们称它们为 A、B 和 C。
问题#1
A、B 和 C 是 GUI 应用程序,在 A 退出之前,"launch.exe"无法进行。 然后它再次卡住,直到 B 退出。 然后再次卡住,直到 C 退出。 我希望 lauch.exe能够在我打开的应用程序保持打开状态时继续前进。
问题#2
假设我能够找出问题 #1 的解决方案,在启动 A、B 和 C 之后,我不希望"launch.exe"保持打开状态。 我希望启动.exe关闭,我希望 A、B 和 C 保持运行。
这是适合您的一个场景。 假设"launch.exe"只启动一个应用程序(我们称之为A)。 然后,在 A 启动后,如果我关闭"launch.exe",A 将保持打开状态。
还行。。。这就是我想要的,但刚刚发生了什么? A现在是孤儿吗?如果是这样,这是一个问题吗?
如果我在退出启动之前关闭了 A .exe怎么办? 从表面上看似乎还可以,但它又回到了什么? 如果我在 cmd shell 中启动了一个 exe,它会返回到那个,但由于我是从 c++ 应用程序中的 system() 调用中完成的,它是返回到我的 lauch.exe还是变成僵尸?
笔记:
我为什么要使用 system()?
--因为我需要一些与Windows/Linux兼容的东西。
--因为我需要将某些正在启动的应用程序的权限提升到管理员级别。
--我应该补充一点,A,B和C完全独立是至关重要的(出于安全原因,它们不应该共享相同的内存空间或其他任何东西)。
--最后,一些应用程序,B和C是多线程的(我这样说是因为我读过某些函数不能正确生成多线程应用程序。 我不清楚原因。
请改用spawn
,这不会阻止启动器,直到孩子退出。
或者,由于您已经在使用 Qt,请使用 QProcess
。
没有可移植的方法可以以其他用户的身份生成子进程,但特定于 Windows 的方式是 CreateProcessWithLogonW
.
为什么不使用在命令参数后附加 & 符号和 "&" 启动 A B C 进程
std::system ("ProcessA&");
std::system ("ProcessB&");
std::system ("ProcessC&");
这样,您的启动器就不会等待这些进程退出。
然后以QApplication::exit
或QApplication::quit
退出启动器
阅读这个SO问题,看看fork/execvp和system()之间的区别。
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 以某种方式告诉编译器"Do not process line of code"
- 尝试通过Process Pipe发送/接收到python包装器,c ++代码
- Boost::process on Windows - with MinGW?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- 使用单独的参数调用"boost::process::system()"时,获取"execv
- Boost.Process - 从具有休眠循环的进程读取
- AWS Lambda C++ 开发工具包"Process exited before completing request"
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- 使用boost.process同时读取和写入孩子的STDIO
- Android 从 Runtime.exec() 或 Java.Process() 执行本机库
- c++ get Process.GetCurrentProcess().SessionId
- BOOST PROCESS RUNTUN()和EXIT_CODE()线程安全
- 传递向量或论点以bubost :: process(boost :: fusion)
- 即使包含 process.h,_beginthreadex 和 _endthreadex 也是未定义的
- 我的程序在尝试将数据集追加到类对象时遇到"Process returned -1073741819 (0xC0000005)"
- 程序在使用异步的 Boost.Process 调用 std::future.get() 后挂起
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 由procexp(MS process explorer)创建的VC10调试转储文件-只有堆栈信息,没有变量值
- C++ System() orphan & zombie process