0

好的,我的任务是编写一个 C 程序,该程序将根据 & 是否是最后一个参数,在后台或前台运行特定进程。在谷歌搜索中,我发现要在后台运行一个进程,你所要做的就是跳过父进程中的“wait(&status)!=pid”行。子进程将在后台运行。

这让我想到了一个关于 fork() 的问题。当我键入 fork() 时,会创建一个子进程。现在,我的问题是 - 在调用 fork() 之后,程序的控制是否总是在父进程之前传递给子进程?是否可以先将控件传递给父进程?还是这两个进程并行运行?

如果进程并行运行,我可以看到跳过等待部分可能如何工作,但如果进程按顺序运行则不行。

例如:-

pid=fork()
if(pid==0) execvp("ls",argv);
else if(pid>0) return pid;

如果假设,子进程首先运行。"pid==0" 计算结果为真,调用 execvp,覆盖子进程的 ls。"ls" 终止,控制权转移到父进程。这里没有等待命令并且 ls 终止,然后我们才回到父进程。后台工作不会发生。

如果父进程首先运行,它会看到 pid>0,控制转移到主函数。由于没有等待命令,因此子进程根本不会运行,至少在父进程终止之前不会运行。

那么,它实际上是如何工作的呢?我的一些概念可能离题了。如果是,请纠正我。

谢谢。

4

1 回答 1

0

调度程序平等对待父进程和子进程。如果需要,您不得假设任何预定义的执行顺序和程序同步。

于 2012-08-30T08:07:28.620 回答