
fork & thread
文章平均质量分 54
财务码农小老板
我以前是一个穷逼财务,现在想做一名小资码农,将来我还想做不管闲事的小老板。
展开
-
进程学习:进程间通信(system v IPC)3.信号灯
1.信号灯是有若干个信号量组成;2.semctl,可以控制整个信号灯,也可以对信号灯中的某一个信号量进行控制;GETVAL /SETVAL对信号量进行操作IPC_SET/IPC_SATA/IPC_RMID共享内存和信号灯是结合使用的;原创 2017-10-21 14:35:23 · 356 阅读 · 0 评论 -
进程学习:进程退出_exit()和exit()
_exit 和 exit 最大的区别在于后者在结束进程时会刷新缓存区,前者则不会刷新缓存区;#include <stdio.h>#include <unistd.h>#include <sys/wait.h>#include <sys/types.h>int main(int argc, const char *argv[]){ pid_t pid; if( (pid = fo原创 2017-10-16 17:25:18 · 391 阅读 · 0 评论 -
进程学习:初见进程
进程 pid_t fork(void); 功能:创建一个新的进程 参数:无 返回值: 成功:如果是父进程返回子进程的pid号;如果是子进程返回0; 失败:返回-1特点一:调用一次,返回两次#include <stdio.h>#include <unistd.h>#include <stdlib.h>int main(int argc, const char *argv[]){原创 2017-10-16 16:14:32 · 298 阅读 · 0 评论 -
进程学习:4-僵尸进程
一、僵尸进程:当前进程运行结束,但其资源没有被回收;二、验证方法: 1.用fork函数创建两个进程,让子进程退出,父进程不调用wait/waitpid为子进程回收资源;(代码如下)#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(int argc, const char *argv[]){ pid_原创 2017-10-15 21:50:32 · 424 阅读 · 0 评论 -
进程间通信-信号(售票员、司机上下车问题)
#include <stdio.h>#include <signal.h>#include <stdlib.h>#include <unistd.h>#define errmes(mes) do{perror(mes);exit(1);}while(0)pid_t pid;void handler_sl(int signo){ if(signo == SIGINT){原创 2016-09-24 22:21:22 · 832 阅读 · 0 评论 -
线程学习:1-理解PV操作和信号量
一、进程通常分为就绪、运行和阻塞三个工作状态。三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的。PV操作主要就是P操作、V操作和信号量。其中信号量起到了至关重要的作用。二、对于信号量,可以认为是一个仓库,有两个概念,容量和当前的货物个数。P操作从仓库拿货,如果仓库中没有货,线程一直等待,直到V操作,往仓库里添加了货物,为了避免P操作一直等待下去,转载 2016-11-16 12:47:24 · 626 阅读 · 0 评论 -
进程学习:4-守护进程的出错记录
一、守护进程的出错记录 守护进程不像普通程序,在调试的时候可以使用gdb或是在编译的时候出现在终端上的报错原因和行号,所以在编写守护进程的时候出错处理就变得十分重要。 所以守护进程就有它自己的出错记录方式,一般有三种方式产生出错日志:1. 内核例程可以调用log函数,但是这一方式牵涉到内核,暂不研究2. 调用syslog函数产生日志消息,这个转载 2016-11-14 17:31:27 · 940 阅读 · 0 评论 -
进程学习:处理僵尸进程的两种方式
上篇讲到僵尸进程产生的原因及危害,并且简要的提到了避免产生僵尸进程的两种方法: 一、让父进程先退出,形成孤儿进程,最终由1号进程(init进程)来回收子进程系统资源; 二、父进程调用wait、waitpid函数,以阻塞或非阻塞轮训的方式来等待子进程退出,并回收子进程的系统资源; 本篇将具体来讲解一下,两种解决方案的具体实施过程。一、避免僵尸进程之 ✈✈✈✈ 形成孤儿进程《Unix 环境高原创 2016-11-03 22:08:20 · 981 阅读 · 0 评论 -
进程学习:进程间通信(基础知识篇)
system v IPC 函数一览图key值 和 id值其他IPC的***get函数也是这样的原理;查看 IPC(消息队列、共享内存、信号灯) 命令行参数一、 ipcs 查看所有 IPC,如下图所示: 二、分别查看消息队列、共享内存、信号灯; 1. ipcs -q :查看消息队列; 2. ipcs -m :查看共享内存; 3. ipcs -s : 查看信号灯;三、删除消息队列、共享原创 2017-11-01 15:53:44 · 466 阅读 · 0 评论 -
进程学习:1-进程、进程组、作业、会话、控制终端详解
一、进程 传统上,Unix操作系统下运行的应用程序、 服务器以及其他程序都被称为进程,而Linux也继承了来自unix进程的概念。必须要理解下,程序是指的存储在存储设备上(如磁盘)包含了可执行机器指 令(二进制代码)和数据的静态实体;而进程可以认为是已经被OS从磁盘加载到内存上的、动态的、可运行的指令与数据的集合,是在运行的动态实体。这里指的 指令和数据的集合可以理解为Linux上ELF文件格式中转载 2016-11-13 13:28:21 · 479 阅读 · 0 评论 -
进程学习:2-
进程组、会话与终端(1).每个进程都属于一个进程组。进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号。每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中)。 #include <unistd.h> pid_t getpgrp(void); //返回值;调用进程的进程组ID每个进程组都有一个组长进程,组长进程的标识是进程组I转载 2016-11-13 13:34:05 · 371 阅读 · 0 评论 -
进程学习:3-进程组、会话、守护进程
进程组 一个或多个进程的集合 进程组ID: 正整数 两个函数 getpgid(0)=getpgrp() eg:显示子进程与父进程的进程组id1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 5 int main() { 6 pid_t pid; 7 8 if原创 2016-11-13 13:42:29 · 585 阅读 · 0 评论 -
进程学习:5- 守护进程
4.2.4 Linux守护进程工作原理和方式在C/S模式下,服务器监听(Listen)在一个特定的端口上等待客户连接。连接成功后服务器和客户端通过端口进行数据通信。守护进程的工作就是打开一个端口,并且等待(Listen)进入连接。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听其他的服务请求。1.独立运行的守护进程独立运行的守护进程由init脚本负转载 2016-11-14 18:00:12 · 514 阅读 · 0 评论 -
线程间通信之信号量(多文件编程,全局变量的问题)
线程间通信是利用全局变量来进行通讯的。在多文件编程下,全局变量的引用声明该如何做呢? 下面写一个从标准输入读数据,并且在标准输出打印数据的小程序,来演示一下。-----thread.h---------------------------------------------#ifndef thread_h#define thread_h#include <stdio.h>#include <原创 2017-09-27 22:52:53 · 1120 阅读 · 0 评论 -
进程学习:进程间通信(system v IPC)1.消息队列
消息队列与管道的异同点:消息队列与管道的相同点:1.都是利用内核的1G空间来通信(如图);消息队列与管道的不同点:1.管道的数据读取是严格按照先进先出;2.消息队列的数据读取可以按照数据类型进行读取;ftok用于IPC通信(消息队列,共享内存,信号灯)ftok,确保两个进程打开的是同一个消息队列;ftok可以产生一个唯原创 2017-10-21 10:00:44 · 542 阅读 · 0 评论 -
进程学习:进程间通信(传统通信方式)1.无名管道
无名管道的特点:1.适用场景:只能用于具有亲缘关系的两个进程之间; 2.通信模式:半双工模式,具有固定的读端(0)和写端(1); 3.读写方式:用文件io,不支持lseek; 4.读阻塞:当管道中无数据时; 写阻塞:当管道中写满数据时; 5.管道大小:无名管道大小64k; 6.管道破裂:关闭读端,仍然想管道中写入数据时; 对管道进行写的进程会收到内核发原创 2017-10-23 22:25:01 · 377 阅读 · 0 评论 -
进程学习:进程间通信(传统通信方式)3.信号
信号是一个异步通信(意思就是忽略程序执行的先后顺序),大白话就是你别管我,我在呢,你该干啥就干啥,等到信号来时,我会蹦出来处理信号的;常用到的信号函数: kill:向指定进程发送一个信号; raise:向当前进程发送一个信号; alarm:给当前进程设置一个定时器; pause:阻塞等待,直到当前进程收到一个信号为止; signal:捕获一个信号,并执行用户自定义的信号处理程序,或执行忽略原创 2017-10-21 09:58:17 · 373 阅读 · 0 评论 -
进程学习:进程间通信(system v IPC)2.共享内存
1.共享内存与消息队列、管道的区别:消息队列、管道中的数据读取之后就没有了;共享内存中的数据无论读取多少次,都还会在里面;2.共享内存读取相对于消息队列与管道来说,效率最高,直接对指向共享内存的指针进行读写操作;原创 2017-10-21 13:41:44 · 345 阅读 · 0 评论