在 c++ 中,不等待并不意味着在后台运行?
In c++, not waiting doesn't mean running in the background?
在我的c++程序中,我尝试在后台运行程序,而不是等待它们。
然而,在Linux中,如果我在后台像这样启动vi: vi &
,那么vi不会显示。在我的程序中,即使我不等待它终止,vi仍然会弹出。
这是否意味着我并没有在后台运行它?如何解决这个问题?
另外,我注意到在Linux中,如果我输入fg
将vi带到前台,那么vi将出现。我如何在c++中做到这一点?
这里发生的事情相当复杂(有关您可能不需要的更多信息,请参阅glibc关于作业控制的手册部分),但简短的版本是:只有前台进程组可以访问终端。任何其他进程在试图访问终端时都会被内核自动地^Z处理。
当你从C中派生一个进程时,如果父进程在前台进程组中,子进程也被认为在前台进程组中,除非父进程或子进程改变了这一点。当您执行vi &
时,shell(请记住,它只是另一个C程序)将vi
从前台进程组中取出。但是你没有这样做,所以vi
立即运行。
现在,您想要从您的C程序中派生一个进程,并将其视为与在shell中使用&
运行的进程相同。你只能做其中的一部分。你可以把它放到一个非前台进程组中——参见glibc手册;正如我所说,它很复杂——但是您不能将它添加到shell的作业控制命令所知道的进程组列表中。该列表是shell内部的状态,无法从其他进程获取。
相关文章:
- 为什么我的线程不在后台运行?
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- Bash run 命令在子壳的后台运行
- 如何在后台运行QProcess?
- 如何在程序后台运行函数(特别是自动保存函数)?QT / C++
- 如何重定向 stderr 并使用 popen() 在后台运行
- 如何使用相同的可执行文件在后台运行 3 个 QProcess
- Dictach std ::线程在后台运行
- 为什么当应用在后台运行时,本机线程的行为会有所不同
- 如何使用C ++在后台运行软件而不显示任何窗口
- 使用提升多线程在后台运行函数
- 在后台运行应用程序并捕获传入和传出消息
- 什么可能导致我的 C++ win32 应用程序在后台运行
- 如何使我的控制台C++程序在后台运行
- 在 C 语言的后台运行进程
- 在 C 语言的后台运行线程
- 如何防止Win32应用程序在主窗口关闭后在后台运行
- 当应用程序在后台运行时,如何弹出QMessageBox
- 在后台运行带有接口的matlab
- 在c++ /C中后台运行周期性循环