
进程通信
奔跑的蜗牛0510
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux wait函数解析
进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。wait(等待子进程中断或结束)相关函数 waitpid,fork表头文件#include#inclu原创 2012-05-28 14:11:49 · 401 阅读 · 0 评论 -
管程
管程的基本思想是,将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。 从语言的角度看,管程主要有以下特性: (1)模块化。管程是一个基本程序单位,可以单独编译; (2)抽象数据类型。管程是中不仅有数据,而且有对数据的操作; (3)信息掩蔽。管程外可以调用管程内部定义的一些函数,但函数转载 2012-10-07 08:49:54 · 607 阅读 · 0 评论 -
TCP/IP
TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。五层模型:从下到上:物理层、数据链路层、网络层、传输层、应用层。开放式系统互连(OSI)七层:从下到上:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP的三次握手在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次转载 2012-10-07 08:51:50 · 473 阅读 · 0 评论 -
异步回收fork出的子进程(僵尸进程)
什么是僵尸进程 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被 僵尸进程销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)僵尸进程是怎么样产生 在Linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代转载 2012-10-07 08:36:58 · 804 阅读 · 0 评论 -
SIGPIPE信号问题
socket编程问题SIGPIPE信号问题=========================当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。 根据信号的默认处理规则SIGPIPE信号的默认执行动作是termin转载 2012-10-23 19:04:46 · 429 阅读 · 0 评论 -
Linux设置环境变量
Linux设置环境变量小结1、总结背景在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件来进行操作就太繁琐了。这涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。本案例基于RedHat AS4讲解环境变量定制的问题。2、变转载 2012-10-23 19:05:50 · 456 阅读 · 0 评论 -
信号量和自旋锁区别
信号量和自旋锁区别自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环查看是否该自旋锁的保持者已经释放了锁,"自旋"就是"在原地打转"。而信号量则引起调用者睡眠,它把进程从运行队列上拖出去,除非获得锁。------------------------------------------------------虽然听起来两者之间的使用条件复杂,其实在实际使转载 2012-10-23 19:09:57 · 803 阅读 · 0 评论 -
线程的互斥锁
1.线程的互斥锁1.1. 初始化:在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化转载 2012-11-29 15:14:59 · 702 阅读 · 0 评论 -
MINIGUI学习总结
int send( SOCKET s, const char FAR *buf, int len, int flags );不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符; 第二个参数指明一个存放应用程序要发送转载 2012-11-29 15:16:52 · 719 阅读 · 0 评论 -
ioctl
函数名: ioctl 功 能: 控制I/O设备 用 法: int ioctl(int handle, int cmd,[int *argdx, int argcx]); include/asm/ioctl.h中定义的宏的注释:#define _IOC_NRBITS 8 //序数(number)字段转载 2012-12-03 15:19:57 · 522 阅读 · 0 评论 -
Linux环境进程间通信(二): 信号(上)
一、信号及信号来源信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基转载 2012-12-31 16:21:42 · 398 阅读 · 0 评论 -
Linux环境进程间通信(一)
1、 管道概述及相关API应用1.1 管道相关的关键概念管道是Linux支持的最初Unix IPC形式之一,具有以下特点:管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道; 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程); 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,转载 2012-12-31 16:19:26 · 484 阅读 · 0 评论 -
深刻理解Linux进程间通信(IPC)
序linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力 AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)原创 2012-12-31 16:27:19 · 825 阅读 · 1 评论 -
Linux环境进程间通信(二): 信号(下)
一、信号生命周期从信号发送到信号处理函数的执行完毕对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。相邻两个事件的时间间隔构成信号生命周期的一个阶段。下面阐述四个事件的实际意义:信号"诞生"。信号的诞生指的是触发信转载 2012-12-31 16:22:38 · 515 阅读 · 0 评论 -
Linux环境进程间通信(三)
消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然 POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求接受信号的进程在某个时间范围内对信号做出反应,因此该信号最多在接受信号进程的生命周期内才有意义,信号所传递的信息是接近于转载 2012-12-31 16:23:26 · 480 阅读 · 0 评论 -
Linux环境进程间通信(四)
一、信号灯概述信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制。相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程也可以修改该标志。除了用于访问控制外,还可用于进程同步。信号灯有以下两种类型:二值信号灯:最简单的信号灯形式,信号灯的值只能取0或1,类似于互斥锁。 注:二值信号灯能够实现互斥锁的功能,但两者的关注内容不同。信号灯强调共转载 2012-12-31 16:24:18 · 545 阅读 · 0 评论 -
Linux环境进程间通信(五): 共享内存(上)
采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通信完毕为止,转载 2012-12-31 16:25:04 · 481 阅读 · 0 评论 -
管道通信
例:用C语言编写一个程序,建立一个pipe,同时父进程生成一个子进程,子进程向pipe 中写入一字符串,父进程从pipe中读取该字符串。[cpp] view plaincopyprint?"FONT-SIZE: 24px; FONT-FAMILY: KaiTi_GB2312">#include main( ) { int x, fd[2]; ch转载 2012-10-07 08:48:11 · 1595 阅读 · 0 评论 -
exec函数族的使用
调用shell脚本命令:execlp("sh","sh","filename",(char*)0);exec用被执行的程序完全替换调用它的程序的影像。fork创建一个新的进程就产生了一个新的PID,exec启动一个新程序,替换原有的进程,因此这个新的被exec执行的进程的PID不会改变,和调用exec函数的进程一样。int exec…装入和运行其它程序:转载 2012-05-28 14:14:44 · 391 阅读 · 0 评论 -
linux socket编程
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有原创 2012-05-28 18:59:07 · 776 阅读 · 1 评论 -
进程与线程学习笔记
1、系统调用在程序状态字(Program Status Word, PSW)寄存器中有一个二进制位控制CPU的两种工作模式(内核态和用户态)。在内核态运行时,CPU可以执行指令集中的每一条指令,操作系统在内核态下运行,从而可以访问整个硬件。用户程序在用户态下运行,仅允许执行整个指令集中的一个子集。一般而言,在用户态中有关I/O和内存保护的所有指令都是禁止的。为了从操作系统中获得服务,用户程序使原创 2012-05-31 07:54:08 · 1068 阅读 · 2 评论 -
进程间通信学习小结(共享内存)
要使用共享内存,应该有如下步骤:1.开辟一块共享内存 shmget()2.允许本进程使用共某块共享内存 shmat()3.写入/读出4.禁止本进程使用这块共享内存 shmdt()5.删除这块共享内存 shmctl()或者命令行下ipcrm共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自转载 2012-05-31 08:06:19 · 712 阅读 · 0 评论 -
并行与并发
前段时间完成的软件中,出现了不但没有发挥双核的优势,反而出现了在单核没有的问题。不知道为什么这样,接下来准备把真正的多核开发,发挥多核的优势,作为目标,解决这个多核编程的问题!!!一:并行与并发:1.“并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。2.而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的原创 2012-05-31 07:52:41 · 798 阅读 · 1 评论 -
在用户空间中实现线程
有两种主要的方法实现线程包:在用户空间中和在内核中。前者是把整个线程包放在用户空间中,内核对线程包一无所知,仍按正常的单线程进程方式管理。在用户空间实现线程,线程在一个运行时系统(即线程库)的顶部运行,这个运行时系统是一个管理线程的过程的集合,包括pthread_create、pthread_exit、pthread_join、pthread_yield等过程。每个进程需要其专门的线程表(th转载 2012-05-31 07:59:06 · 2091 阅读 · 0 评论 -
进程调度机制
进程切换的代价是比较高的:首先必须从用户态切换到内核态,然后保存当前进程的状态以便以后重新装载,接着通过调度程序(scheduler)选定一个新进程,之后将新进程的内存映像重新装入,最后新进程开始运行。可见,选择一个好的进程调度算法(scheduling algorithm)非常重要。通常我们将进程划分两类:I/O密集型(IO-bound)和计算密集型(computer-bound),更多的进程倾转载 2012-05-31 08:00:47 · 1741 阅读 · 0 评论 -
Linux fork与vfork的深入分析
一)fork的概述 .操作系统对进程的管理,是通过进程表完成的.进程表中的每一个表项,记录的是当前操作系统中一个进程的信息. .进程在系统的唯一标识是PID,PID是一个从1到32768的正整数,其中1一般是特殊进程init,其它进程从2开始依次编号.当用完32768后,从2重新开始. .一个称为“程序计数器(program counter, pc)”的寄存器,指出当前占用原创 2012-05-31 11:17:03 · 651 阅读 · 0 评论 -
三个你不知道的线程问题
一、.程序什么时候应该使用线程,什么时候单线程效率高。答:1.耗时的操作使用线程,提高应用程序响应2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。3.多CPU系统中,使用线程提高CPU利用率4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。其他情况都使用单线程。二、.Linux有原创 2012-05-30 11:36:19 · 1105 阅读 · 0 评论 -
消息队列 解析
本系列文章中的前两部分,我们探讨管道及信号两种通信机制,本文将深入第三部分,介绍系统 V消息队列及其相应 API。消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求原创 2012-05-31 07:47:41 · 606 阅读 · 0 评论 -
缓存 非缓冲 I/O
先来了解下什么是标准IO以及文件IO。标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。(1)全缓存:当填满标准IO缓存后才进行实际的IO操作。 (2)行缓存:当输入或输出中遇到新行符时,标准IO库执行I转载 2012-05-31 13:30:29 · 782 阅读 · 0 评论 -
SOCKET网络编程:Linux下实现聊天室
程序介绍:本聊天室程序在Ubuntu下,采用C语言实现,结构为Client/Server结构; 服务端程序通过共享存储区存储聊天数据,并发送给每个连接的客户端; 服务端程序和客户端程序都是通过父子进程分别负责发送和接收数据的,以避免数据冲撞; 需按以下格式调用客户端程序:client.exe服务端主机IP端口号(本程序设定为:3490)用户名(在聊天室中原创 2012-06-04 21:55:54 · 1844 阅读 · 1 评论 -
函数fork与vfork的区别与联系详解
创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。1.fork函数介绍#include sys/types.h>#include unistd.h>pid_t fork (void );正确返回:父进程中返回子进程的进程号;子进程中返回0;(单调用双返回函数)错误返回:-1;子进程是原创 2012-06-27 19:28:32 · 633 阅读 · 0 评论 -
C++多线程编程一 [关于数据竞争问题]
采用多线程的好处大家都很熟悉了,可以充分利用系统资源,通过合理调度最大程序上并发执行,但是如果设计不当反而会与初衷相悖,带来更多的麻烦,本文主要就多线程编程中的“数据竞争”问题做一个归纳和总结,并给出WIN32下部分函数使用说明。 多线程编程中数据竞争是一项关键的技术,常用的解决方法有以下四种:临界区、互斥量、 事件 、 信号量 临界区一般不推荐使用,下面主要介绍后面三种。原创 2012-06-29 07:55:45 · 1323 阅读 · 0 评论 -
死锁
一.死锁发生的条件死锁的发生必须具备下列4个必要条件:–互斥:任一时刻只允许一个进程使用资源–请求和保持:进程在请求其余资源时,不主动释放已经占用的资源–非剥夺:进程已经占用的资源,不会被强制剥夺–环路等待:环路中的每一条边是进程在请求另一进程已经占有的资源。二.处理死锁的方法1.预防死锁:破坏四个必要条件中的一个或几个条件; 易于转载 2012-10-07 08:54:08 · 481 阅读 · 0 评论 -
Linux环境进程间通信(五): 共享内存(下)
系统调用mmap()通过映射一个普通文件实现共享内存。系统V则是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。也就是说,每个共享内存区域对应特殊文件系统shm中的一个文件(这是通过shmid_kernel结构联系起来的),后面还将阐述。1、系统V共享内存原理进程间需要共享的数据被放在一个叫做IPC共享内存区域的地方,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地转载 2012-12-31 16:25:46 · 474 阅读 · 0 评论