||
守护进程常常用作服务器进程。确实,我们可以称图13-1中的syslogd进程为服务器进程,用户进程(客户进程)用UNIX域数据报套结字向其发送消息。
一般而言,服务器是等待客户进程与其联系的一个进程,客户进程向它提出某种类型的服务要求。图13-1中,由syslog服务器进程提供的服务是将出错消息记录到日志文件中。
图13-1中,客户进程和服务器之间的通信是单向的。客户进程向服务器进程发送服务请求,服务器进程则不向客户进程回送任何消息。在接下来有关进程通信的几章中,我们将见到大量客户进程和服务器进程之间双向通信的示例。客户进程向服务器进程发送请求,服务器进程则向客户进程回送应答。
PS:此处的图13-1见UNIX环境高级编程P345
锁的隐含继承和释放
关于记录锁的自动继承和释放有三条规则:
(1)锁与进程和文件两方面有关。这有两重含义:第一重很明显,当一个进程终止时,它所建立的锁全部释放;第二重意思就不很明显,任何时候关闭一个描述符时,则该进程通过这一描述符可以引用的文件上的任何一把锁都被释放(这些锁都是该进程设置的)。
(2)由fork产生的子进程不继承父进程所设置的锁。这意味着,若一个进程得到一把锁,然后调用fork,那么对于父进程获得的锁而言,子进程被视为另一个进程,对于从父进程处继承过来的任一描述符,子进程需要调用fcntl才能获得它自己的锁。这与锁的所用是相一致的。锁的作用是阻止多个进程同时写一个文件(或同一文件区域)。如果子进程继承父进程的锁,则父、子进程就可以同时写同一个文件。
(3)在执行exec后,新程序可以继承原执行程序的锁。但是注意,如果对一个文件描述符设置了close-on-exec标志,那么当作为exec的一部分关闭该文件描述符时,对相应文件的所有锁都被释放了。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-20 09:59
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社