新書推薦:
《
中国思想的再发现(壹卷:近观系列,沟口雄三教授以其精湛的学术洞察力,旨在呈现一个全面而立体的中国思想图景)
》
售價:NT$
325.0
《
骨科康复学(第2版)
》
售價:NT$
1140.0
《
笔记启蒙 : 英国皇家学会与科学革命
》
售價:NT$
390.0
《
汉语副词研究论集(第六辑)
》
售價:NT$
490.0
《
镶嵌之美:古希腊罗马的马赛克艺术
》
售價:NT$
1390.0
《
后希腊化哲学:从斯多亚学派到奥利金的发展研究
》
售價:NT$
349.0
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:NT$
295.0
《
第二人生:找到重新定义人生的智慧
》
售價:NT$
440.0
編輯推薦:
唯一一本针对Web开发人员的Unix编程书籍,让你无需借助C语言即可玩转Unix进程,教给你如何自主编写并调试高效服务器。教你游刃有余的利用系统编程技术,许多WEB开发人员或者对UNIX系统的基本原理知之甚少,理解unix进程可弥补这方面的缺憾,帮你从底层了解unix系统的进程机制。
內容簡介:
《理解Unix进程》从Unix编程的基础概念着手,采用循序渐进的方法,详细介绍了Unix进程的内部工作原理。《理解Unix进程》提供的许多简单而强大的技术,能够帮助Web开发人员深入了解Unix系统的并发性、守护进程、生成进程spawning
process与信号等。同时,读者也可以使用这些技术和方法编写并调试自己的服务器。此外,《理解Unix进程》附录部分也涉及了一些流行的Ruby项目,让读者进一步了解如何巧妙运用Unix进程。《理解Unix进程》适合Unix程序员、Web开发人员阅读。
關於作者:
Jesse Storimer
高级软件工程师与自出版作家,服务于美国电子商务方案提供商Shopify。痴迷于编程,编程之余喜欢阅读、园艺以及徒步旅行等户外运动。除了经常写技术博客文章外,他还著有Working
with TCP Sockets, Working with Ruby Threads两本颇有影响力的电子书。
目錄 :
第1章 引言
第2章 基础知识
2.1 干嘛要在意?
2.2 驾驭神力!
2.3 概述
2.4 系统调用
2.5 命名法,wtf2
2.6 进程:Unix之本
第3章 进程皆有标识
3.1 交叉参考
3.2 实践领域
3.3 系统调用
第4章 进程皆有父
4.1 交叉参考
4.2 实践领域
4.3 系统调用
第5章 进程皆有文件描述符
5.1 万物皆为文件
5.2 描述符代表资源
5.3 标准流
5.4 实践领域
5.5 系统调用
第6章 进程皆有资源限制
6.1 找出限制
6.2 软限制与硬限制
6.3 提高软限制
6.4 超出限制
6.5 其他资源
6.6 实践领域
6.7 系统调用
第7章 进程皆有环境
7.1 这是个散列吗?
7.2 实践领域
7.3 系统调用
第8章 进程皆有参数
8.1 这是个数组!
8.2 实践领域
第9章 进程皆有名
9.1 进程命名
9.2 实践领域
第10章 进程皆有退出码
第11章 进程皆可衍生
11.1 Luke,使用fork2
11.2 多核编程?
11.3 使用block
11.4 实践领域
11.5 系统调用
第12章 孤儿进程
12.1 失控
12.2 弃子
12.3 管理孤儿
第13章 友好的进程
13.1 对CoW好点
13.2 MRIRBX用户
第14章 进程可待
14.1 看顾Babysitting
14.2 Process.wait一家子
14.3 使用Process.wait2进行通信
14.4 等待特定的子进程
14.5 竞争条件
14.6 实践领域
14.7 系统调用
第15章 僵尸进程
15.1 等待终有果
15.2 僵尸长什么样子?
15.3 实践领域
15.4 系统调用
第16章 进程皆可获得信号
16.1 捕获SIGCHLD
16.2 SIGCHLD与并发
16.3 信号入门
16.4 信号来自何方?
16.5 信号一览
16.6 重定义信号
16.7 忽略信号
16.8 信号处理程序是全局性的
16.9 恰当地重定义信号处理程序
16.10 何时接收不到信号?
16.11 实践领域
16.12 系统调用
第17章 进程皆可互通
17.1 我们的第一个管道
17.2 管道是单向的
17.3 共享管道
17.4 流与消息
17.5 远程IPC?
17.6 实践领域
17.7 系统调用
第18章 守护进程
18.1 首个进程
18.2 创建第一个守护进程
18.3 深入Rack
18.4 逐步将进程变成守护进程
18.5 进程组和会话组
18.6 实践领域
18.7 系统调用
第19章 生成终端进程
19.1 fork + exec
19.2 exec的参数
19.3 实践领域
19.4 系统调用
第20章 尾声
20.1 抽象
20.2 通信
20.3 再会,而非永别
附录A Resque如何管理进程
附录B Unicorn如何收割工作进程
附录C preforking服务器
附录D Spyglass
索引
內容試閱 :
"第2章
基础知识
本章介绍了全书涉及的重要概念的相关知识。在深入主要章节之前,建议你先阅读该部分内容。
2.1 干嘛要在意?
自1970年起,Unix编程模型就已经以某种形式存在了。当时,Unix在贝尔实验室闪亮问世,随之一起诞生的还有C程序设计语言,或曰C程序设计框架。在随后的数十载中,作为一款可靠、安全和稳定的操作系统,Unix经受住了时间的考验。
Unix编程理念及技术并非一时之风,亦不是新近流行的编程语言。它们已超越了编程语言。无论你是使用C、C++、Ruby、Python、JavaScript、Haskell,还是自己钟意的其他语言,这些技术都有用武之地。
Unix编程模型已经存在了数十载之久,且大部分都没有改变。过去40年里,聪慧的程序员们一直在Unix编程模型中借助多种编程语言来解决各类难题,在接下来的40年里,他们仍将一如既往。
2.2 驾驭神力!
现在我要提醒你,本书所讲述的概念和技术将赐予你强大的力量。有了它,你能够编写出新的软件,理解现有的复杂软件,甚至能将你的职业生涯提升到新的高度。
请记住:能力越大,责任也越大。在阅读的过程中,我会详细告诉你如何获取这种能力,并避开各种陷阱。
2.3 概述
本书并非参考手册,它更像是一份攻略。因为每一章内容都是基于之前的章节,所以为了最有效地利用本书,你应该按章节顺序逐一读下去。读完全书后,你可以利用章节名来查找有关信息,温故而知新。
书中包含了大量的代码示例。我强烈建议你在Ruby解释器中逐一运行这些代码。自己动手调试有助于更深入地理解概念。
一旦读完全书并把玩过那些示例,你肯定想要接触一些更具深度的实际项目。那时,你可以看看书中提到的Spyglass项目。
Spyglass是一个专门为本书编写的Web服务器,旨在传授Unix编程概念。它采用了你在这里学习到的各种概念,并展示了如何将其应用于真实的项目之中。有关详细介绍请参阅本书最后一章。
2.4 系统调用
要理解系统调用,首先需要了解Unix系统的组成,具体来说就是用户空间(userland)和内核。
Unix系统内核位于计算机硬件之上,它是与硬件交互的中介。这些交互包括通过文件系统进行读写、在网络上发送数据、分配内存,以及通过扬声器播放音频。鉴于它这些强大的能力,程序不可以直接访问内核,所有的通信都是通过系统调用来完成的。
系统调用为内核和用户空间搭建了桥梁。它规定了程序与计算机硬件之间所允许发生的一切交互。
所有的程序都运行在用户空间。就算是不借助系统调用,你的用户空间程序仍旧能做不少事情:数学运算、字符串操作,以及使用逻辑语句控制程序流程。不过我敢说,如果你打算让程序做些有意思的事情,那就还是得通过系统调用来使用内核。
如果你是一名C程序员,那么这些内容你可能已经驾轻就熟了。系统调用可谓是C编程的核心。
我估计你像我一样毫无C编程经验。你学习的是高级语言编程。在你学会将数据写入文件系统的时候,对于使用了哪些系统调用却并不
知情。
总地来说,系统调用允许你的用户空间程序通过内核间接地与计算机硬件进行交互。在本书接下来的章节中,我们会考查一些常见的系统调用。
2.5 命名法,wtf2
学习Unix编程的障碍之一就是不知道从哪里查找合适的文档。想不想听点出人意料的回答?其实所有东西都包含在Unix手册页(manpages)中了。如果你在用Unix系统,那么这些东西都已经在你的计算机里了。
要是你以前压根就没有用过手册页,那么你可以在终端中输入命令man man进行查看。
不错吧?嗯,还算凑合吧。系统调用API的手册页在以下两种情况中是很不错的资源。
1 你是一名想知道如何使用特定系统调用的C程序员。
2 你想搞明白某个系统调用的用途。
这里假设我们都不是C程序员,所以第一种情况就没什么用了,但是第二种情况却是相当受用。
你在整本书中都会看到类似于select2这样的引用。它告诉你可以从哪里找到特定系统调用的手册页。你可能有所不知,Unix手册页包含了很多节(section)。
以下是FreeBSD和Linux系统手册页中最常用的节:
? 节1:一般命令
? 节2:系统调用
? 节3:C库函数
? 节4:特殊文件
因此,节1专门用于一般命令,也就是shell命令。如果我希望你参考find命令的手册页,我就会这样写:find1。这就是说在手册页的节1你可以找到find的使用说明。
如果我希望你参考getpid系统调用的手册页,我就会这样写:getpid2。这就是说在手册页的节2你可以找到getpid的使用说明。
为什么手册页还要分这么多节?因为一个命令可能在不止一节中出现,也就是说它既可以作为shell命令,也可以作为系统调用。
例如stat1和stat2。
要查看手册页的其他节,你可以像这样在命令行上输入:
$ man 2 getpid
$ man 3 malloc
$ man find # 等同于man 1 find
这种记法并非本书所独创,而是大家参照手册页时通用的一套惯例 。所以你最好还是从现在开始学习并适应它。
2.6 进程:Unix之本
进程乃Unix系统的基石。为什么要这么说?因为所有的代码都是在进程中执行的。
例如,当你从命令行运行ruby时,你的代码就生成了一个新的进程。代码执行完毕,进程也随之退出。
$ ruby -e ""p Time.now""
在你系统中运行的所有代码皆是如此。你知不知道一直运行的MySQL服务器?它运行在自己的进程中。你正在使用的电子阅读器软件呢?它也是运行在自己的进程中。那些声嘶力竭通知你收到了新消息的电子邮件客户端呢?别搭理它,接着看书。不过它同样也是运行在自己的进程中。
当你认识到一个进程可以生成并管理其他多个进程的时候,事情就变得有意思了。我们会在后面的部分讨论这些内容。