【APUE】Chapter9 Process Relationships】的更多相关文章

这一章看的比较混乱,可能是因为例子少:再有就是,这一章就是一个铺垫的章节. 9.2 terminal logins 啥叫termnial? 我感觉书上的terminal指的更可能是一些物理设备(keyboard, modem这类的) /etc/ttys里面存着这些终端,一行代表一个终端的信息. 限于基础知识有限,上面的内容可能理解的有误,但是对于terminal logins有一点是可以确定的:计算机事先知道有多少terminals可以logins. 其中BSD Terminal Logins是…
这章的内容比较多.按照小节序号来组织笔记的结构:再结合函数的示例带代码标注出来需要注意的地方. 下面的内容只是个人看书时思考内容的总结,并不能代替看书(毕竟APUE是一本大多数人公认的UNIX圣经). 8.2 Process Identifiers 1. unix system给系统分配进程pid采用的是delay reuse策略:即,刚用完被释放的pid不会马上分配给新的进程,目的是防止新进程错误使用与之前进程相同的ID(这块内容还没太懂,以后再看):但具体等多久不一定. 2. 有几个特殊的p…
这一章内容是Process的基础准备篇章.这一章的内容都是基于C Programm为例子. (一)进程开始: kernel → C start-up rountine → main function 其中C start-up rountine做的事情中包括:获得command-line arguments & environment 好像还有其他的事情,后面再说. (二)进程结束: 五种normal termination方式: 1. return from main 2. exit 3. _e…
Signal主要分两大部分: A. 什么是Signal,有哪些Signal,都是干什么使的. B. 列举了非常多不正确(不可靠)的处理Signal的方式,以及怎么样设计来避免这些错误出现. 10.2 Signal Concepts 1. Signal的实体就是在头文件中定义的正整数(在我使用的linux系统中在/usr/include/bits/signum.h中),如下: 2. 列举了可能会产生Signal的条件: (1)终端的user的案件操作:如,Ctrl+c,Ctrl+\:由termin…
[C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle); //通过句柄得到图标 此法的问题是,如果图像是透明背景,那么得到的Icon的边缘就是毛糙的,像是先垫了一层背景色然后再去色的效果,很不如人意,用过的朋友都知道.尚未研究是bmp.GetHicon出的问题,还是Icon.FromHandle有问题,日后有闲心再捣鼓下. 下面给出完美转换方法: /…
16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Socket Descriptors socket抽象上是一个communication endpoint,具体就是一个int型变量.生成socket的函数如下: int socket(int domain, int type, int protocol) 函数有点儿类似open,即打开一个socket d…
刚上线一个新版本,其中有台电脑打开软件就报[xx的类型初始值设定项引发异常](还好不是一大波电脑,新东西上线就怕哀鸿遍野),如图: 显然是该类型的静态构造函数中抛异常了(红线处就是类名),遂打开该类,其构造函数中唯有一句看起来可能引发异常,即: Process.EnterDebugMode(); //用来开启本进程调试特权(SeDebugPrivilege) 随即把这句放到一个测试程序中,再把测试程序拷到问题电脑上跑,果然是它,抛异常:Win32Exception:并非所有引用的特权或组都分配给…
17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊socket类型,主要用于高效的IPC,特点主要在于高效(因为省去了很多与数据无关的格式的要求). int socketpair(int domain, int type, int protocol, int sockfd[2]) 这个函数用于构建一对unix domain sockets:并且与之前…
15.1 Introduction 这部分太多概念我不了解.只看懂了最后一段,进程间通信(IPC)内容被组织成了三个部分: (1)classical IPC : pipes, FIFOs, message queues, semaphores, and shared memory (2)network IPC : sockets mechanism (3)advanced features of IPC 15.2 Pipes Pipes是“the oldest form of UNIX Syst…
14.1 Introduction 这一章介绍的内容主要有nonblocking I/O, record locking, I/O multiplexing, asynchronous I/O, the readv and writev, memory-mapped I/O 这一章是后面章节的基础,也就是说先当成基础记着,在后面的实操应用章节再去体会. 14.2 Nonblocking I/O "blocking"主要针对slow system call,含义是“the slow sy…
5.1 Introduction 这章介绍的standard I/O都是ISOC标准的.用这些standard I/O可以不用考虑一些buffer allocation.I/O optimal-sized的细节,增加了易用性.但是也有一些问题. 5.2 Streams and FILE Objects 1. Chapter3中提到的I/O routines的核心是file descriptor:而在standard I/O背景下,相应的概念换成了stream. 2. standard I/O可以…
4.1 Introduction unix的文件.目录都被当成文件来看待(vi也可以编辑目录):我猜这样把一起内容都当成文件的原因是便于统一管理权限这类的内容 4.2 stat, fstat, fstatat and lstat Functions & 4.3 File Types 1. 介绍一个系统提供的结构体 struct stat,里面包含了与文件相关的各种信息. 书上还介绍,unix系统命令ls -l就是用了上面的数据结构. 2. File Types 书上一共介绍如下几种文件类型: (…
这章主要讲了几类unbuffered I/O函数的用法和设计思路. 3.2 File Descriptors fd本质上是非负整数,当我们执行open或create的时候,kernel向进程返回一个fd. unix系统中有几个特殊的fd: 0:standard input 1:standard output 2:standard error 这几个带有特殊含义的整数都有对应的可读性强的符号表示:STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO 具体的定义都包含…
这章内容就是“provides a whirlwind tour of the UNIX System from a programmer's perspective”. 其实在看这章内容的时候,已经先看过了Chapter7~Chapter13,回头再看看这样的综述介绍. 1.2 UNIX Architecture 主要就了解下面这张图即可: 在一般UNIX operating system中谁在哪层来调用谁. 1.3 Logging In 操作系统根据/etc/passwd中的信息来判断log…
这章节内容比较紧凑,主要有5部分: 1. 守护进程的特点 2. 守护进程的构造步骤及原理. 3. 守护进程示例:系统日志守护进程服务syslogd的相关函数. 4. Singe-Instance 守护进程. 5. 其他相关内容 1. 守护进程的特点 守护进程也是unix系统中的一种进程.有大量的系统守护进程,其最主要的特点有两个: (1)系统启动的时候守护进程就跟着起来:只有当系统关闭的时候守护进程才跟着关闭 (2)没有controlling terminal,运行在background 直观上…
今天看了APUE的Chapter12 Thread Control的内容,记录一下看书的心得与示例code. 这一章的内容是对Chapter11 Threads(见上一篇日志)的补充,大部分内容都是理论上的分析提点,大概就是告诉读者:你先知道pthread有这么个特性,如果将来遇到了可以去查查. (一)Thread Limits 这里主要介绍了pthread_attr_t的属性变量,可以通过设置属性变来定制化threads的特性(P426). 其中,一个重要的属性就是thread的stack s…
1.周五对nodejs tcp长连接服务器框架进行压测,一切开始比较常规(没什么特殊问题). 2.突然手一哆嗦,把压测用的客户端群一起关闭了. 3.这个时候nodejs的服务器爆出了"Caught exception: Error: read ECONNRESET". 4.这个以前做linux服务器时候见过(忽略掉SIGPIPE信号,nodejs默认也是这么做的),没有太在意. 5.但是紧接着标题里的错误出现了,一看这个我感觉肯定不是自己直接调用的原因. 6.心想先写一个最简单的服务器…
看完了APUE第三版的Chapter11 Threads,跟着书上的demo走了一遍,并且参考了这个blog(http://www.cnblogs.com/chuyuhuashi/p/4447817.html)的非常好的example. 下面的内容就是看书过程中记录的,可以作为一个参考,但决不能代替看APUE原著. 本来想在自己的mac上跑(毕竟也叫unix系统),后来发现mac上有些pthread的库支持的不全(比如,没有barrier),就改到了centos server上跑. (一)Thr…
基本概念: 在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束. 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态. 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程.孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作. 僵尸进程:一个进程…
#include <unisth.h> pid_t fork(void) fork函数被调用一次,返回两次.子进程的返回值是0,父进程的返回值是子进程的进程id. fork函数调用一次却返回两次:向父进程返回子进程的ID,向子进程中返回0.这是因为父进程可能存在很多个子进程,所以必须通过这个返回的子进程ID来跟踪子进程:而子进程只有一个父进程,他的ID可以通过getppid取得. 子进程和父进程继续执行fork调用之后的指令,子进程是父进程的副本,子进程获得父进程数据空间.堆和栈的副本.注意:…
进程标识符:非负整数 ID为0的进程通常是是调度进程,常被称为交换进程.该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程 ID为1的进程是init进程,在自举过程结束时由内核调用,此进程负责在自举内核后启动一个UNIX系统,init通常读入与系统有关的初始化文件,并将系统引导到一个状态,init进程不会终止.它是普通的用户进程,以超级用户特权运行 常用函数: pid_t getpid(void)  返回调用进程的进程id pid_t getppid(void) 返回调用进程…
Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file descriptor(简称:fd,文件描述符). 系统调用是如何完成一个I/O操作的呢? linux将内存分为内核区,用户区: linux内核给我们管理所有的硬件资源,应用程序通过调用系统调用和内核交互,达到使用硬件资源的目的:应用程序通过系统调用read发起一个读操作:这时候内核创建一个文件描述符,并通过驱动…
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件.实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域.而是保持共享区域,直到通信完毕为止,这样,数据内容一直保存在共享内存中,并没有写回文件.共享内存中的内容往往是在解除映射时才…
1.文件描述符 对于内核来说,所有打开的文件都通过文件描述符来引用.文件描述符是一个非负整数.当打开一个现有的文件或者创建一个新文件时,内核向进程返回一个文件描述符.当读.写一个文件时,使用open或creat返回文件描述符描述符标识该文件,将其作为参数传递给read或者write函数.通常文件描述符0与进程的标准输入关联.文件描述符1与进程的标准输出关联.文件描述符2与进程的标准错误相关联.但是在POSIX标准中,应该把他们替换成符号常量STDIN_FILENO.STDOUT_FILENO和S…
http://blog.csdn.net/zg_hover/article/details/2553321 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等. 同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. .基本概念 .进程 .每个进程都有一个父进程 .…
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html http://blog.chinaunix.net/uid-20543672-id-3252604.html http://bbs.chinaunix.net/thread-2333160-1-1.html 一.信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信.本质上,信号量是一个计数器,它用来记录对某个资源…
当一个进程终止时,内核就向其父进程发送SIGCHLD信号.因为子进程终止是个异步事件,所以这种信号也是内核向父进程发的异步通知.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数.对于这种信号的系统默认动作是忽略它. 调用wait或waitpid的进程发生的情况如下: 1.如果所有子进程都还在运行,则阻塞 2.如果一个子进程已终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回 3.如果它没有任何子进程,则立即出错返回 #include <sys/wait.h>…
转自:http://coolshell.cn/articles/5426.html 基本命令: i → Insert 模式,按 ESC 回到 Normal 模式. x → 删当前光标所在的一个字符. :wq → 存盘 + 退出 (:w 存盘, :q 退出)   (陈皓注::w 后可以跟文件名) dd → 删除当前行,并把删除的行存到剪贴板里 p → 粘贴剪贴板 简单的移动光标 0 → 数字零,到行头 ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)…
具体内容见:http://coolshell.cn/articles/7965.html 字符设备.块设备主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,而块设备则不然,它利用一块系统内存作为缓冲区,当用户进程对设备请求能满足用户的要求时,就返回请求的数据,如果不能就调用请求函数来进行实际的I/O操作,因此,块设备主要是针对磁盘等慢速设备设计的,以免消耗过多的CPU时间来等待块设备通过系统缓存进行读取,不是直接和物理磁盘读取.字符设备可以直接物理磁盘读取,不经过系统…
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中 执行.当进程处于内核态时,执行的内核代码会使用当前进程的内核栈.每个进程都有自己的内核栈.当进程在执行用户自己的代码时,则称其处于用户运行态(用 户态).即此时处理器在特权级最低的(3级)用户代码中运行. 内核态与用户态是操作系统的两种运行级别,跟intel cpu没有必然的联系, intel cpu提供Ring0-Ring3四种级别的运行模式,Rin…