Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c++;,不等待并不意味着';我不是说在后台跑步吗? 我的C++程序中,我只是试图在后台运行程序,而不是等待它们。_C++_Process_Background_Foreground - Fatal编程技术网

在c++;,不等待并不意味着';我不是说在后台跑步吗? 我的C++程序中,我只是试图在后台运行程序,而不是等待它们。

在c++;,不等待并不意味着';我不是说在后台跑步吗? 我的C++程序中,我只是试图在后台运行程序,而不是等待它们。,c++,process,background,foreground,C++,Process,Background,Foreground,但是在Linux中,如果我在后台像这样启动vi:vi&,那么vi就不会出现。在我的程序中,vi仍然会弹出,即使我不等待它终止 这是否意味着我不是在后台运行它?如何解决这个问题 另外,我注意到,在Linux中,如果我键入fg将vi带到前台,那么vi就会出现。如何在C++中实现这一点?这里的情况相当复杂(对于更多的信息,可能比您需要的更多,请参阅GLUBC的手册部分),但简短的版本是:只有前台进程组才能访问终端。如果任何其他进程试图访问终端,它将被内核自动^Z 当您从C派生一个进程时,如果父进程在前

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

这是否意味着我不是在后台运行它?如何解决这个问题


另外,我注意到,在Linux中,如果我键入
fg
将vi带到前台,那么vi就会出现。如何在C++中实现这一点?

这里的情况相当复杂(对于更多的信息,可能比您需要的更多,请参阅GLUBC的手册部分),但简短的版本是:只有前台进程组才能访问终端。如果任何其他进程试图访问终端,它将被内核自动^Z

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


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

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

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


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

您可能应该在后台提供显示如何启动程序的代码通常,启动程序而不等待它意味着您的程序和新程序同时运行。但这并不一定意味着新程序在后台运行。运行后台是一个操作系统概念,与c++无关。您可能应该提供代码,说明如何在后台启动程序。通常,启动程序而不等待它意味着您的程序和新程序同时运行。这并不意味着新程序在后台运行,运行后台是OS概念,与C++无关。