gpt4 book ai didi

c++ - 在c++中,不等待不等于在后台运行?

转载 作者:行者123 更新时间:2023-11-30 01:29:28 25 4
gpt4 key购买 nike

在我的 C++ 程序中,我尝试通过不等待程序在后台运行程序。

但是在 Linux 中,如果我像这样在后台启动 vi:vi &,那么 vi 不会出现。在我的程序中,即使我不等待它终止,vi 仍会弹出。

那么这是否意味着我并没有真正在后台运行它?如何解决?

此外,我注意到在 Linux 中,如果我键入 fg 将 vi 调到前台,那么 vi 就会出现。我如何在 C++ 中执行此操作?

最佳答案

这里发生的事情相当复杂(有关比您可能需要的更多信息,请参阅 glibc 手册中关于 job control 的部分)但简短的版本是:只有 前台进程组 可以访问终端.任何其他进程如果试图访问终端,都会被内核自动 ^Zed。

当您从 C 派生进程时,如果父进程在前台进程组中,则子进程也被视为在前台进程组中,除非父进程或子进程更改了这一点。当您执行 vi & 时,shell(记住,这只是另一个 C 程序)将 vi 从前台进程组中取出。但是您没有这样做,所以 vi 会立即运行。

现在,您想从您的 C 程序中派生出一个进程,并让它像从 shell 中使用 & 运行一样被对待。你只能做其中的一部分。您可以将其放入非前台进程组——有关说明,请参阅 glibc 手册;正如我所说,它很复杂 -- 但您不能将它添加到 shell 的作业控制命令知道的进程组列表中。该列表是 shell 内部的状态,无法从另一个进程获取它。

关于c++ - 在c++中,不等待不等于在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877918/

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