Process 关于通过c程序和fork()运行后台/前台进程的查询

Process 关于通过c程序和fork()运行后台/前台进程的查询,process,fork,Process,Fork,好的,我的任务是编写一个C程序,根据&是否是最后一个参数,在后台或前台运行特定的进程。在谷歌上,我发现要在后台运行一个进程,你所要做的就是跳过“等待(&状态)”这一行=父进程中的“pid”。子进程将在后台运行 这就引出了一个关于fork()的查询。当我键入fork()时,将创建一个子进程。现在,我的问题是-在调用fork()之后,程序的控制是否总是在父进程之前传递给子进程?是否可能先将控件传递给父进程?还是这两个进程并行运行 如果进程并行运行,我可以看到跳过等待部分可能会如何工作,但如果进程按顺

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

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

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

例如:-

pid=fork()
if(pid==0) execvp("ls",argv);
else if(pid>0) return pid;
如果假设,则首先运行子进程。“pid==0”的计算结果为true,调用execvp,在子进程上覆盖ls。“ls”终止,控制转移到父进程。这里wait命令不在那里,ls终止,然后我们返回到父进程。后台工作不会发生

若父进程首先运行,它会看到pid>0,控制权转移到主函数。因为wait命令不在那里,所以子进程根本不会运行,至少在父进程终止之前不会运行

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


谢谢

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

Fork会创建一个新进程。从那时起,父级和子级都是独立安排的,没有“控制权转移到父级”。除非您显式等待(或使用其他synch.methods),否则它们将独立运行。