qishi821的个人博客分享 http://blog.sciencenet.cn/u/qishi821

博文

linux学习之守护进程和锁的隐含继承和释放

已有 2213 次阅读 2017-2-19 20:26 |个人分类:Linux|系统分类:科研笔记

   守护进程常常用作服务器进程。确实,我们可以称图13-1中的syslogd进程为服务器进程,用户进程(客户进程)用UNIX域数据报套结字向其发送消息。

   一般而言,服务器是等待客户进程与其联系的一个进程,客户进程向它提出某种类型的服务要求。图13-1中,由syslog服务器进程提供的服务是将出错消息记录到日志文件中。

   图13-1中,客户进程和服务器之间的通信是单向的。客户进程向服务器进程发送服务请求,服务器进程则不向客户进程回送任何消息。在接下来有关进程通信的几章中,我们将见到大量客户进程和服务器进程之间双向通信的示例。客户进程向服务器进程发送请求,服务器进程则向客户进程回送应答。

   PS:此处的图13-1UNIX环境高级编程P345


   锁的隐含继承和释放

   关于记录锁的自动继承和释放有三条规则:

  (1)锁与进程和文件两方面有关。这有两重含义:第一重很明显,当一个进程终止时,它所建立的锁全部释放;第二重意思就不很明显,任何时候关闭一个描述符时,则该进程通过这一描述符可以引用的文件上的任何一把锁都被释放(这些锁都是该进程设置的)。

  (2)由fork产生的子进程不继承父进程所设置的锁。这意味着,若一个进程得到一把锁,然后调用fork,那么对于父进程获得的锁而言,子进程被视为另一个进程,对于从父进程处继承过来的任一描述符,子进程需要调用fcntl才能获得它自己的锁。这与锁的所用是相一致的。锁的作用是阻止多个进程同时写一个文件(或同一文件区域)。如果子进程继承父进程的锁,则父、子进程就可以同时写同一个文件。

  (3)在执行exec后,新程序可以继承原执行程序的锁。但是注意,如果对一个文件描述符设置了close-on-exec标志,那么当作为exec的一部分关闭该文件描述符时,对相应文件的所有锁都被释放了。




https://blog.sciencenet.cn/blog-2355761-1034658.html

上一篇:linux学习之线程标识
下一篇:linux学习之管道
收藏 IP: 182.150.36.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-19 08:03

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部