Chinaunix首页 | 论坛 | 博客
  • 博客访问: 366099
  • 博文数量: 50
  • 博客积分: 1495
  • 博客等级: 上尉
  • 技术积分: 805
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 14:19
文章分类

全部博文(50)

文章存档

2011年(47)

2010年(3)

分类: LINUX

2011-04-12 19:11:40

008_进程控制-02

 

1)Vfork函数

Vfork用于创建一个新进程,而该新进程的目的是exec一个新程序。

 

Vfork并不将父进程的地址创建完全复制到子进程中,因为子进程会立即调用exec,于是也就不会存访该地址空间。不过在子进程调用exec OR exit()之前,它在父进程的空间中运行。

Vforkfork之间的另一个区别是:vfork保证子进程先运行,在它调用exec OR exit之后父进程才可能被调度运行。

  1. int main(void)

  2. {

  3.     pid_t pid;

  4.     int num = 6;

  5.  

  6.     if ((pid = vfork()) < 0) {

  7.         perror("vfork()");

  8.         exit(-1);

  9.     } else if (pid == 0) {

  10.         num++;

  11.         printf("I am child process, PID = %d, num = %d\n", getpid(), num);

  12.         exit(0);

  13.     } else {

  14.         printf("I am parent process, PID = %d, num = %d\n", getpid(), num);

  15.     }

  16.     return 0;

  17. }

OUTPUT

cjok@ubuntu:~/c/process$ ./vfork

I am child process, PID = 8761, num = 7

I am parent process, PID = 8760, num = 7

 

 

2)exit()函数

a)对于其父进程已经终止的所有进程,它们的父进程都改为init进程。

b)一个已经终止、但是其父进程尚未对其进行善后处理(获取终止进程的有关信息、释放它仍占用的资源)的进程被称为僵尸进程(zombie)

 

3) Waitwaitpid函数

a)调用waitwaitpid进程可能会出现

      i.阻塞(如果其所有的子进程都在运行)

      ii.带子进程的终止状态立即返回(如果一个子进程已终止,正等待父进程存取其终止状态);

      iii.出错立即返回(如果它没有任何子进程)

 

b)区别

a)在一个子进程终止前,wait使其调用者阻塞,而waitpid有一选择项,可使调用者不阻塞。

b)Waitpid并不是等待第一个终止,它用若干个选择项,可以控制它所等待的进程。

 

 水平有限,如果有错误的地方,请指正,thanks

cjok.liao@gmail.com


阅读(1772) | 评论(0) | 转发(0) |
0

上一篇:013_精灵程序

下一篇:009_进程关系

给主人留下些什么吧!~~