zoukankan      html  css  js  c++  java
  • 进程

    父进程与子进程的共享
    在克隆进程时,Linux 允许两个进程共享相同的资源,包括文件(file对象)、信号处理程序和虚拟内存等。当某个资源被共享时,该资源的引用计数值会增加 1,从而只有两个进程均终止时,内核才会释放这些资源。
    而子进程被创建之后,复制了父进程的全局变量、静态变量、文件描述符等,所以堆,栈,全局区,都是独立的。
    什么是文件描述符
    在Linux中,进程是通过文件描述符(file descriptors,简称fd)而不是文件名来访问文件的,文件描述符实际上是一个整数。每个进程都有一个文件描述符表,表示这个进程打开的所有文件。文件描述表中每一项都是一个指针,指向一个用于描述打开的文件的数据块———file对象,file对象中描述了文件的打开模式,读写位置等重要信息,当进程打开一个文件时,内核就会创建一个新的file对象。需要注意的是,file对象不是专属于某个进程的,不同进程的文件描述符表中的指针可以指向相同的file对象,从而共享这个打开的文件。
    管道通信与文件描述符
    一般的管道,只能在父子进程间进行通信,这是因为管道实现的进程间通信是在父进程fork()出子进程时,子进程会继承父进程的文件描述符表,而这个文件 描述符表里记录了所有父进程打开的文件,所以子进程也继承了父进程打开的文件,所以父子进程可以通过同一个文件描述符去访问同一个文件,而管道就是建立在 文件描述符上的。建立一个管道必须和两个文件描述符相关,一个可以赋予可读权限,一个可以赋予可写权限,但是这两个文件描述符其实都和同一个文件关联,所以你通过不同的文件描述符去访问这个文件时,可以获得不同的访问权限,如果在父子进程中,在父进程将fd[0]为可读,fd[1]可写,而子进程fd[0]可读,fd[1]可写,那么这个管道就将父子进程连起来
    进程与线程
    每个进程至少拥有一个线程,来执行进程的地址空间中的代码,该线程称为主线程。
    进程是资源分配的最小单位,线程是CPU调度的最小单位。
    进程间的通信方式(IPC)
    # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在父子进程间使用。
    # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    # 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    # 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    # 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。shmget,shmat等方式见 http://blog.csdn.net/liuy5277/article/details/8393521
    # 套接字( socket ) : 套接口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  • 相关阅读:
    ffmpeg影片转码+m3u8-segmenter影片切片
    Linux ffmpeg安装步骤详解
    linux系统部署ffmpeg视频转码环境及使用方法
    SSH反向连接使用Autossh自动ssh
    WordPress整合Google自定义搜索
    优化Wordpress的方法总结
    WordPress 数据库操作WPDB对象($wpdb)用法详解
    WordPress插件WP-PostViews的调用方法
    国内大互联网公司如何做测试
    一分钟了解ruby中的单测
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4615423.html
Copyright © 2011-2022 走看看