neu*_*cer 1 c++ background process foreground
在我的c ++程序中,我试图在后台运行程序,只是不等待它们.
但是在Linux中,如果我像这样在后台启动vi:vi &那么vi就不会出现了.在我的程序中,即使我不等待它终止,vi仍然会弹出.
那么这是否意味着我不是真的在后台运行它?怎么解决这个问题?
另外,我注意到在Linux中如果我键入fg以将vi带入前台,则会出现vi.我怎么能用c ++做到这一点?
这是怎么回事这里比较复杂(更多的信息可能比你需要,请参阅glibc的手册部分作业控制),但短期的版本是:只有前台进程组可以访问该终端.^Z如果内核尝试访问终端,则内核会自动编辑其他进程.
当您从C派生进程时,如果父进程位于前台进程组中,则除非父进程或子进程发生更改,否则该子进程也被视为位于前台进程组中.当你这样做时vi &,shell(它只是另一个C程序,请记住)vi从前台进程组中取出.但是你没有这样做,所以vi立即行动.
现在,您希望从C程序中派生一个进程,并将其视为与&从shell 运行的进程相同.你只能做其中的一部分.您可以将其放入非前台进程组 - 有关说明,请参阅glibc手册; 正如我所说,它很复杂 - 但是你无法将它添加到shell的作业控制命令所知道的进程组列表中.该列表是shell的内部状态,没有办法从另一个进程获取它.