码迷,mamicode.com
首页 > 系统相关 > 详细

Linux进程入门

时间:2014-12-31 23:59:58      阅读:579      评论:0      收藏:0      [点我收藏+]

标签:

Linux进程入门

 

学习Linux下通信过程中看两本书《Linux网络编程》和《Unix环境下高级编程》。在此也不想评论哪本书好,哪本书不好,想详细了解的话还是建议看《Unix环境高级编程》。本文是在看《Linux网络编程》一书的学习记录。

 

思维导图如下:

技术分享

创建进程

通过fork()创建进程,fork()系统调用调用一次返回两次,返回给父进程的是子进程的进程id(pid)。返回给子进程的是0。通过父进程没有相应的函数获取子进程id。但是子进程可以通过getppid()获取父进程idgetpid()获取本身进程id

Fork()调用细节

Fork()将父进程数据和代码完全拷贝给子进程。他们运行在不同的地址空间。所以子进程修改某个局部变量与父进程不会跟着修改。值得一提的是子进程从父进程中继承而来的文件描述符。他们都相当于指针的作用。实际数据在系统空间中。类似

 技术分享

 

Pa1pa2指向同一个地址,修改*pa1*pa2随着修改。文件描述符原理类似。

 

 技术分享

 

上面没有检查函数的返回值。这不是个好习惯。

以上程序运行的结果如下:

 技术分享

首先子进程移动文件指针,位置为10。父进程再移动指针,如果父进程当前文件指针位置为0,则read之后,pos应该为10。根据输出结果可以知道文件父进程的文件指针在read之前已经到达10了,所以说父子进程都应用同一个文件描述符。

进程同步

通过waitwaitpid来同步。Wait会堵塞,直到有子进程退出,父进程从内核中取出退出进程的退出信息。Waitpid有选项设置是否堵塞。

进程终止

Exit_exit函数都可以退出进程。Exit会关闭文件描述符,刷新缓冲区。_exit没有这些处理。

 技术分享

两种异常退出

1.父进程运行结束,子进程还没运行结束。则由init进程对子进程进行领养

2.子进程结束,但是在父进程中没有调用wait来获取子进程的退出状态。成为僵死进程。

 

Linux进程入门

标签:

原文地址:http://www.cnblogs.com/ickelin/p/4196724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!