随笔分类 -  Linux系统编程(进程、线程)

摘要:Linux内核线程实现原理 类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。 1. 轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone 2. 从内核里看 阅读全文
posted @ 2019-03-21 18:36 GodL 阅读(181) 评论(0) 推荐(0)
摘要:守护进程 Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。 Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输 阅读全文
posted @ 2019-03-21 13:49 GodL 阅读(211) 评论(0) 推荐(0)
摘要:创建会话 创建一个会话需要注意以下6点注意事项: getsid函数 获取进程所属的会话ID pid_t getsid(pid_t pid); 成功:返回调用进程的会话ID;失败:-1,设置errno pid为0表示察看当前进程session ID ps ajx命令查看系统中的进程。参数a表示不仅列当 阅读全文
posted @ 2019-03-21 13:46 GodL 阅读(124) 评论(0) 推荐(0)
摘要:中断系统调用 系统调用可分为两类:慢速系统调用和其他系统调用。 结合pause,回顾慢速系统调用: 慢速系统调用被中断的相关行为,实际上就是pause的行为: 如,read ① 想中断pause,信号不能被屏蔽。 ② 信号的处理方式必须是捕捉 (默认、忽略都不可以) ③ 中断后返回-1, 设置err 阅读全文
posted @ 2019-03-20 11:34 GodL 阅读(130) 评论(0) 推荐(0)
摘要:SIGCHLD的产生条件 子进程终止时 子进程接收到SIGSTOP信号停止时 子进程处在停止态,接受到SIGCONT后唤醒时 借助SIGCHLD信号回收子进程 子进程结束运行,其父进程会收到SIGCHLD信号。该信号的默认处理动作是忽略。可以捕捉该信号,在捕捉函数中完成子进程状态的回收。 上述代码若 阅读全文
posted @ 2019-03-20 11:04 GodL 阅读(1180) 评论(0) 推荐(0)
摘要:一个函数在被调用执行期间(尚未调用结束),由于某种时序又被重复调用,称之为“重入”。根据函数实现的方法可分为“可重入函数”和“不可重入函数”两种。 注意事项 a) 使用静态数据结构 b) 调用了malloc或free c) 是标准I/O函数 阅读全文
posted @ 2019-03-20 10:07 GodL 阅读(786) 评论(0) 推荐(0)
摘要:pause函数 调用该函数可以造成进程主动挂起,等待信号唤醒。调用该系统调用的进程将处于阻塞状态(主动放弃cpu) 直到有信号递达将其唤醒。 int pause(void); 返回值:-1 并设置errno为EINTR 返回值: ① 如果信号的默认处理动作是终止进程,则进程终止,pause函数么有机 阅读全文
posted @ 2019-03-18 20:21 GodL 阅读(195) 评论(0) 推荐(0)
摘要:信号的特质:由于信号是通过软件方法实现,其实现手段导致信号有很强的延时性。但对于用户来说,这个延迟时间非常短,不易察觉。 每个进程收到的所有信号,都是由内核负责发送的,内核处理。 产生信号: 1. 按键产生,如:Ctrl+c、Ctrl+z、Ctrl+\ 2. 系统调用产生,如:kill、raise、 阅读全文
posted @ 2019-03-13 21:11 GodL 阅读(267) 评论(0) 推荐(0)
摘要:mmap函数 void *mmap(void *adrr, size_t length, int prot, int flags, int fd, off_t offset); 返回:成功:返回创建的映射区首地址;失败:MAP_FAILED宏 参数: addr: 建立映射区的首地址,由Linux内核 阅读全文
posted @ 2019-03-12 20:44 GodL 阅读(246) 评论(0) 推荐(0)
摘要:管道,其本质是一个伪文件(实为内核缓冲区);由两个文件描述符引用,一个表示读端、一个表示写端;规定数据从管道的写端流入,读端流出。 管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。 必须用于有血缘关系的进程 管道的局限性: ① 数据自己读不能自己写。 ② 数据一旦被读走,便不在 阅读全文
posted @ 2019-03-11 20:03 GodL 阅读(341) 评论(0) 推荐(0)
摘要:父进程调用wait函数可以回收子进程的终止信息,该函数有三个功能:(一次wait调用回收一个子进程 回收多个用循环) 1、阻塞等待子进程退出 2、回收子进程残留资源 3、获取子进程结束状态(退出原因) pid_t wait(int *status) //status为传出参数 子进程的结束状态 成功 阅读全文
posted @ 2019-03-11 16:32 GodL 阅读(167) 评论(0) 推荐(0)
摘要:fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 阅读全文
posted @ 2019-03-10 16:05 GodL 阅读(144) 评论(0) 推荐(0)
摘要:创建子进程:fork调用, 一次fork调用返回两个值,1、返回子进程的pid(非负整数) 2、返回0 父进程的fork返回子进程的id,子进程的fork返回0(表示执行成功) 创建单个子进程: 循环创建多个子进程 for(...) { 上述代码...在子进程中加入break } 进程的有效用户与实 阅读全文
posted @ 2019-03-09 15:23 GodL 阅读(176) 评论(0) 推荐(0)