与“无名管道”不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如“/tmp/my_fifo”,其对应到磁盘上的一个管道文件,如果我们用file命令来查看其文件类型的话,会得到如下输出: my_fifo: fifo (named pipe) 为了简化对FIFO的理解,我们可以这样来假想:进程A在磁盘上创建了一个名为my_fifo的文件,并向其中写入一些数据,然后进程B打开该文件,并将数据从文件中读出,这样我们便实现了进程A和进程B之间的通信.大致原理如此,只不过FIFO做了…
catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别.管道是Linux支持的最初Unix IPC形式之一,具有以下特点 . 管道是半双工的,数据只能向一个方向流动; 需要双方通信时,需要建立起两个管道 . 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)…
学习了linux下的进程,觉得应该整理一下,忘得差不多了,顺便回顾一下. 学而时习之,不亦说乎~~ 进程笔记 ,什么是进程? The Single UNIX Specification, Version (UNIX98) and its predecessor Version (UNIX95), defines a process as “an address spacewith one or more threads executing within that address space, a…
所谓“进程间通信(IPC,inter-process communication)”,按照其目的讲就是让进程之间能够“共享数据”,“传输数据”,“事件通知”等,我所知道的一共有“管道” “信号” “消息队列(报文)” “共享内存” “套接字” 这几种方式. 这里先看看“管道” 可以将管道想象成生活中的水管,只不过其中流动的是“数据”.一个管道有两个“端”,一个称为“写端”,从这里将数据写入管道,另外一个称为“读端”,用于将数据从管道中读出. 管道分为非命名管道和命名管道两种,前者一般写成pipe…
1.什么是程序?什么是进程?它们有什么区别? 定义: 程序:程序(Program)是一个静态的命令集合,程序一般放在磁盘中,然后通过用户的执行来触发.触发后程序会加载到内存中成为一个个体,就是进程. 进程:进程(Process)的一个比较正式的定义是[在自身的虚拟地址空间运行的一个单独的程序.] [个人理解:进程的本质是一个被加载到内存中并获得系统资源使之运行的程序实例] 区别: 程序通常是一个二进制文件,不占用系统的运行资源. 进程是一个随时都可能发生变化的.动态的.使用系统运行资源的程序.而…
PID,进程号 , 范围在2~(??为什么需要这么多),而一个名为idle (或swapper)的进程占据的编号0,init进程占据了编号1. 进程0和进程1 : 系统启动时会从无到有地创建进程0,它是所有其它进程的祖先.进程0最终会创建进程1,也就是init,它是Unix系统内核初始化与用户态初始化的接合点,它是其它用户process的祖宗.在运行init以前是内核态初始化,该过程(内核初始化)的最后一个动作就是运行/sbin/init可执行文件.从init process运行开始进入Unix…
在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调度. 一个很好的例子是:假设目前系统只运行了两个进程,一个解压缩程序和一个文本编辑器.由于解压缩程序会大量地占用CPU而不是I/O设备(将解压后的文件写入磁盘),所以对解压缩程序而言CPU是其最大的影响因素,我们将这类程序归类为“CPU-Bound(CPU限制型)”.与之相对应的,文本编辑器对CPU…
进程跟踪 long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Linux用ptrace来进行进程跟踪,就跟我们平时用GDB debug一样,它允许一个进程去跟踪和控制另外一个进程.当被跟踪进程有信号发生时,被跟踪进程会被暂停下来,其内存空间变得可读写,跟踪它的进程可以选择是否忽略该信号和让程序继续进行.被跟踪进程无论是进行系统调用还是从系统调用返回时,跟踪它的进程都可以来处理该系统调用,比如…
信号(或软中断)是在软件层次上对中断的一个模拟,其运行在“用户空间”,一个进程对另外一个或几个进程通过发送信号来实现异步通信.当接收进程接收到信号后,其可以注册一下处理函数来说对这些信号进行处理(也可以选择忽略该信号或者采用系统默认的处理方式). 我看可以通过“kill -l”命令来查看系统支持的信号,比如SIGKILL它表示需要终止一个进程,它有一个系统特定的信号值9.这些值都定义在signal.h中 在signal.h中有个叫做_NSIG(一般为64)的宏其表示该系统支持的最多信号数,而SI…
我们知道,当用fork启动一个新进程以后,新进程会复制父进程的大部份内存空间并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一个程序集中的代码,这就相当于启动了一个新程序. 所以,要运行一个新程序,需要最基本的两步: Ÿ 创建一个可运行程序的环境,也就是进程. Ÿ 将环境中的内容替换成你所希望的,也就是用你希望运行的可执行文件去覆盖新进程中的原有映像,并从该可执行文件的起始处开始执行. 要做到第一点,非常简单,fork函数就可以:而要做到第二点,则可以利用exec函数…