gpt4 book ai didi

C++ system() 孤儿和僵尸进程

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:35 24 4
gpt4 key购买 nike

我有一个小应用程序,我们称它为“launch.exe”。这是一个 C++ 应用程序。

我在其中所做的是调用 system() 3 次以启动其他 3 个应用程序。我们称它们为 A、B 和 C。

问题#1
A、B 和 C 是 GUI 应用程序,“launch.exe”在 A 退出之前无法运行。然后再次卡住,直到B退出。然后再次卡住,直到C退出。我希望 lauch.exe 能够在我打开的应用程序保持打开状态时继续运行。

问题#2
假设我能够找到问题 #1 的解决方案,在 A、B 和 C 启动后,我不希望“launch.exe”保持打开状态。我希望 launch.exe 关闭,我希望 A、B 和 C 继续运行。

这是一个适合您的场景。让我们说“launch.exe”只启动一个应用程序(让我们称之为 A)。然后,在 A 启动后,如果我关闭“launch.exe”,A 仍然打开。

好吧...这就是我想要的,但刚刚发生了什么? A现在是孤儿吗?如果是这样,这是一个问题吗?

如果我在退出 launch.exe 之前关闭 A 怎么办?表面上看起来还可以,但是它返回到什么地方呢?如果我在 cmd shell 中启动一个 exe,它会返回到那个位置,但是由于我是从 c++ 应用程序中的 system() 调用执行的,它会返回到我的 lauch.exe 还是变成僵尸?

注意事项:
为什么我要使用 system()?
--因为我需要一些与 Windows/Linux 兼容的东西。
--因为我需要将一些正在启动的应用程序的权限提升到管理员级别。
--我应该补充一点,A、B 和 C 完全独立是至关重要的(出于安全原因,它们不应共享相同的内存空间或其他任何东西)。
--最后,一些应用程序 B 和 C 是多线程的(我这样说是因为我读到一些函数不能正确生成多线程应用程序。我不清楚原因。)。

最佳答案

改用 spawn,这不会阻塞启动器,直到 child 退出。

或者,由于您已经在使用 Qt,请使用 QProcess


没有可移植的方式来以不同的用户身份生成子进程,但 Windows 特定的方式是 CreateProcessWithLogonW .

关于C++ system() 孤儿和僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com