Chinaunix首页 | 论坛 | 博客
  • 博客访问: 501778
  • 博文数量: 174
  • 博客积分: 8001
  • 博客等级: 中将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-04 19:30
文章分类

全部博文(174)

文章存档

2011年(1)

2010年(24)

2009年(149)

我的朋友

分类: LINUX

2009-03-24 23:42:33

虽然使用fork函数,在一个if...else...的结构中很方便的创建了父子进程执行不同的程序。但是更多的应该是使用exec函数族来执行不同的程序。
虽然exec族函数有很多,但是都是exec+[p,v,l,e],但是p和e为附加选项,并且不同时出现。
就是:
execv
execl
execvp
execlp
execve
execle
这里只是提出一种记忆的用法。但是具体的函数见你手头上的参考资料。
还有一点需要注意,调用exec函数,程序的堆栈段,数据段和程序段都会被修改,只是用户区域维持不变(?),所以新程序一旦被执行,原来的程序将一去不复返。
exit函数退出进程。
wait函数将等待进程退出。waitpid函数提供更多的灵活性。不过,在讨论之前,应该明白Zombie进程的概念。
Zombie进程就是那些已经退出执行,不再占有任何CPU和资源的进程,但是还是在系统的进程表中保留值,并且系统保留它的退出时状态,以供它的父进程获取;当父进程获取了这个状态的时候,子进程才正式宣告死亡。
为了节省系统资源,应该及时的清除退出的进程。
如果父进程比子进程先退出,那么子进程将被init进程“认养”,当子进程退出执行的时候,系统会自动清除它在系统的“痕迹”。
因此,有两种方法清除Zombie进程:
1)wait函数和waitpid函数
2)fork fork
关于这部分,网上讨论甚多,不是我懒,但是我觉得概念才是最重要的——当Linux上的编程事实上,就是和一些struct和函数打交道的时候,试着去理解内核的行为,理解概念,才能真正的掌握Linux编程。


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

上一篇:信号

下一篇:注意!

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