一个fork()系统调用的问题

fork()是做什么的请问man,fork()调用的返回值说明:

1. 在父进程中,fork返回新创建的子进程的pid;

2. 在子进程中,fork返回0;

3. 出错返回一个负值;

一个简单的测试:

#include <iostream>
#include <unistd.h>


int main()
{
  pid_t a1 = fork();
  pid_t a2 = fork();

  std::cout << "a1 = " << a1 << std::endl;
  std::cout << "a2 = " << a2 << std::endl;

  return 0;
}

执行结果如下:

a1 = 1397
a2 = 1398
a1 = 1397
a2 = 0
a1 = 0
a2 = 1399
a1 = 0
a2 = 0

四种结果,是不是有点糊涂,让我们修改下程序更直观的看调用:

#include <iostream>
#include <unistd.h>


int main()
{
  pid_t a1 = fork();
  pid_t a2 = fork();


  std::cout << "{" << std::endl;
  std::cout << "\tpid = " << getpid() << std::endl;
  std::cout << "\tppid = " << getppid() << std::endl;
  std::cout << "\ta1 = " << a1 << std::endl;
  std::cout << "\ta2 = " << a2 << std::endl;
  std::cout << "}" << std::endl;


  wait(NULL);
  return 0;
}

getpid()是获取当前进程的id,getppid()是获取父进程的id,'\t'是为了格式化输出,这回输出结果是:

{
	pid = 1520
	ppid = 1425
	a1 = 1521
	a2 = 1522
}
{
	pid = 1522
	ppid = 1520
	a1 = 1521
	a2 = 0
}
{
	pid = 1521
	ppid = 1520
	a1 = 0
	a2 = 1523
}
{
	pid = 1523
	ppid = 1521
	a1 = 0
	a2 = 0
}

这回就可以直观的看到到底是哪个进程创建了哪个进程

猜你喜欢

转载自my.oschina.net/nemesis/blog/1796499