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

时间:2012-08-30 07:56:28

标签: process fork

好的,我的任务是编写一个C程序,它将在后台或前台运行特定进程,具体取决于是否&是最后一个参数。在谷歌搜索中,我发现要在后台运行一个过程,您只需跳过父进程中的'wait(& status)!= pid'行。子进程将在后台运行。

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

如果进程并行运行,我可以看到跳过等待部分的方式可能有效,但如果进程按顺序运行则不行。

例如: -

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

如果假设,子进程首先运行。 “pid == 0”计算结果为true,调用execvp,ls被子进程覆盖。 “ls”终止,控制转移到父进程。这里wait命令不在那里,ls终止,然后我们回到父进程。背景工作不会发生。

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

那么,它实际上是如何运作的?我的一些概念可能不合时宜。如果他们是,请善意地纠正我。

感谢。

1 个答案:

答案 0 :(得分:0)

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

相关问题