设为首页 加入收藏

TOP

Linux系统调用跟我学――僵尸进程(十二)
2010-12-30 20:28:22 】 浏览:16132
Tags:Linux 系统 调用 跟我学 僵尸 进程
进程打印的结果交杂在一起,而不是严格按照程序中列出的次序。

编译并运行:

$ cc exec.c -o exec
$ ./exec
executed by execl
PATH=/tmp
USER=lei
STATUS=testing
executed by execlp
excuted by execv
executed by execvp
PATH=/tmp
USER=lei
STATUS=testing


果然不出所料,execle输出的结果跑到了execlp前面。

大家在平时的编程(www.cppentry.com)中,如果用到了exec函数族,一定记得要加错误判断语句。因为与其他系统调用比起来,exec很容易受伤,被执行文件的位置,权限等很多因素都能导致该调用的失败。最常见的错误是:

找不到文件或路径,此时errno被设置为ENOENT;

数组argv和envp忘记用NULL结束,此时errno被设置为EFAULT;

没有对要执行文件的运行权限,此时errno被设置为EACCES。

进程的一生

下面就让我用一些形象的比喻,来对进程短暂的一生作一个小小的总结:

随着一句fork,一个新进程呱呱落地,但它这时只是老进程的一个克隆。

然后随着exec,新进程脱胎换骨,离家独立,开始了为人民服务的职业生涯。

人有生老病死,进程也一样,它可以是自然死亡,即运行到main函数的最后一个"}",从容地离我们而去;也可以是自杀,自杀有2种方式,一种是调用exit函数,一种是在main函数内使用return,无论哪一种方式,它都可以留下遗书,放在返回值里保留下来;它还甚至能可被谋杀,被其它进程通过另外一些方式结束他的生命。

进程死掉以后,会留下一具僵尸,wait和waitpid充当了殓尸工,把僵尸推去火化,使其最终归于无形。

这就是进程完整的一生。

小结

本文重点介绍了系统调用wait、waitpid和exec函数族,对与进程管理相关的系统调用的介绍就在这里告一段落,在下一篇文章,也是与进程管理相关的系统调用的最后一篇文章中,我们会通过两个很酷的实际例子,来重温一下最近学过的知识。

首页 上一页 9 10 11 12 下一页 尾页 12/12/12
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇设计Linux系统网络设备驱动程序 下一篇 Linux系统调用跟我学――进程管理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目