好的,我的任务是编写一个 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,控制转移到主函数。由于没有等待命令,因此子进程根本不会运行,至少在父进程终止之前不会运行。
那么,它实际上是如何工作的呢?我的一些概念可能离题了。如果是,请纠正我。
谢谢。