在自己学习或者浏览论坛的过程中,遇到一些与fork有关的小问题,有的比较清楚的解答,有的则不能,但是,这些问题确实可以帮助我更加深入的理解fork的使用,以及在使用过程中应该特别的注意哪些问题。
下面是一些问题及相应的解答,都是来自网络,感谢各位的答案。
1、if((pid = fork()) < 0) 和if(pid = fork() < 0)有什么区别么?因为在Linux下着两个条件运行出的结果完全不同啊
这个问题,我最近就遇到过,少了一个括号,结果却完全不同,百思不得其解啊,经过调试才发现问题。编程需要细心啊。
解答如下:

来自:
2、关于子进程的程序,假设每个函数调用都成功
-
#include <stdio.h>
-
#include <sys/types.h>
-
#include <unistd.h>
-
int main(int argc, char **argv)
-
{
-
fork( );
-
printf("How\n");
-
fork( );
-
printf("are\n");
-
fork( );
-
printf("you\n");
-
- return 0;
解答如下:
按道理说,程序在运行时会分出其他的7个进程,一共8个进程。
也就是说How最多运行两次,are最多运行4次,you最多运行8次。
也不能确定执行的顺序。因为8个进程是相互独立的。
3、下面这个程序不难,只是我感觉网友的解释比较好
-
#include <stdio.h>
-
#include <unistd.h>
-
#include <sys/types.h>
-
#include <sys/wait.h>
-
-
int main()
-
{
-
pid_t p1, p2, p0;
-
p0 = getpid();
-
p1 = fork();
-
p2 = fork();
-
if(getpid() == p1)
-
{
-
printf("I am 1.\n");
-
}
-
if(getpid() == p2)
-
{
-
printf("I am 2.\n");
-
}
-
if(getpid() == p0)
-
{
-
sleep(3);
-
printf("I am 0.\n");
-
}
-
return 0;
- }
解释如下:
函数fork()的返回值:子进程返回0,父进程中返回子进程的进程ID,出错返回-1。
两次fork生成了四个进程,进程是从fork函数开始分叉的,而由于fork返回值不是自己的ID,所以只有爷爷进程里的p0才等于getpid。

后续补充