摘要: 在很多应用程序的设计中,父进程需要知道其某个子进程于何时改变了状态—子进程终止或因收到信号而停止。本章描述两种用于监控子进程的技术:系统调用 wait()以及信号 SIGCHLD。 26.1 等待子进程 对于许多需要创建子进程的应用来说,父进程能够监测子进程的终止时间和过程是很有必要的。 wait( 阅读全文
posted @ 2021-05-25 19:51 Mars.wang 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 本章所述为进程的退出过程。首先说明如何调用 exit()和_exit()以终止一个进程。接着讨论运用退出处理程序(exit handler),在进程调用 exit()时自动执行清理动作。最后,将探讨fork()、 stdio 缓冲区以及 exit()之间的某些交互。 25.1 进程的终止: _exi 阅读全文
posted @ 2021-05-25 17:29 Mars.wang 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 55.4 强制加锁 到目前为止介绍的锁都是劝告式锁。 这意味着一个进程可以自由地忽略 fcntl() (或 flock())的使用或简单地在文件上执行 I/O。内核不会阻止进程的这种行为。在使用劝告式锁时,应用程序的设计者需要: 1.为文件设置合适的所有权(或组所有权)以及权限以防止非协作进程执行文 阅读全文
posted @ 2021-05-25 16:46 Mars.wang 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 前面的章节介绍了进程能用来同步动作的各项技术,包括信号和信号量。本章将介绍专门为文件设计的同步技术。 55.1 概述 应用程序的一个常见需求是从一个文件中读取一些数据,修改这些数据,然后将这些数据写回文件。只要在一个时刻只有一个进程以这种方式使用文件就不会存在问题,但当多个进程同时更新一个文件时问题 阅读全文
posted @ 2021-05-25 16:44 Mars.wang 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 在通常情况下,程序中的多个线程会并发执行,每个线程各司其职,直至其决意退出,随即会调用函数 pthread_exit()或者从线程启动函数中返回。 有时候,需要将一个线程取消(cancel)。亦即,向线程发送一个请求,要求其立即退出。比如,一组线程正在执行一个运算,一旦某个线程检测到错误发生,需要其 阅读全文
posted @ 2021-05-25 15:01 Mars.wang 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 本章介绍线程用来同步彼此行为的两个工具:互斥量( mutexe)和条件变量( condition variable)。互斥量可以帮助线程同步对共享资源的使用,以防如下情况发生:线程某甲试图访问一共享变量时,线程某乙正在对其进行修改。条件变量则是在此之外的拾遗补缺,允许线程相互通知共享变量(或其他共享 阅读全文
posted @ 2021-05-25 14:23 Mars.wang 阅读(47) 评论(0) 推荐(0) 编辑