1. Linux进程控制理论

① 进程是一个具有一定独立功能的程序的一次运行活动(动态性、并发性、独立性、异步性)。

  进程的四要素:

  (1)有一段程序供其执行(不一定是一个进程所专有的),就像一场戏必须有自己的剧本。
       (2)有自己的专用系统堆栈空间(私有财产)
       (3)有进程控制块(task_struct)(“有身份证,PID”)
       (4)有独立的存储空间。

  缺少第四条的称为线程,如果完全没有用户空间称为内核线程,共享用户空间的称为用户线程。

② 经典进程三态:阻塞、就绪、执行

备注:在同一时刻CUP运行的只有一个进程

③ 进程ID(PID):标识进程的唯一数字;父进程ID(PPID);启动进程的用户ID(UID)

④ 进程互斥:当有若干进程都要使用某一共享资源时,任何时候最多允许一个进程使用,其它要使用该资源的进程必须等待,知道占用该资源的进程释放了该资源为止

⑤ 临界资源:操作系统中将一次只允许一个进程访问的资源称为临界资源

⑥ 临界区:进程中访问临界资源的那段代码称为临界区。为实现对临界资源的互斥访问,应保证诸进程互斥的进入各自的临界区

⑦ 进程同步:一组并发进程按一定顺序执行的过程称为进程间的同步

⑧ 进程调度:按一定算法,从一组待运行的进程中选出一个来占有CPU运行

(1)调度方式:抢占式(A正在运行,B就绪,B优先级高,直接运行B)和非抢占式(A正在运行,B就绪,B优先级高,等A运行完再运行B)

(2)调度算法:先来先服务, 短进程优先, 高优先级优先,时间片轮转

⑨ 死锁:多个进程因竞争临界资源而形成的一种僵局

⑩ 获取ID

  pid_t getpid(void);  //获取本进程ID

  pid_t getppid(void);  //获取父进程ID

⑪ 进程创建:

  pid_t fork(void);  //创建子进程

  fork被调用一次,却返回两次,他可能有三种不同的返回值

  (1)在父进程中,fork返回新创建的子进程的PID

  (2)在子进程中,fork返回0

  (3)如果出现错误,fork返回一个负值

  注:fork后的代码由两个进程运行,即两个进程共享一段代码,但会拷贝一份数据,即子进程的数据空间、堆栈空间都会从父进程得到一份拷贝,而不是共享。

⑫ 进程创建的另一个函数:

  pid_t vfork(void)

⑬ exec函数族:用被执行的程序替换调用它的程序

⑭system函数:运行一条命令

(1)system原型:int system(const char* command);

(2)system简单实现:

int system(const char * cmdstring)
{
pid_t pid;
int status; if(cmdstring == NULL)
{
return (); //如果cmdstring为空,返回非零值,一般为1
} if((pid = fork()) < )
{
status = -; //fork失败,返回-1
}
else if(pid == )
{
execl("/bin/sh", "sh", "-c", cmdstring, (char *));
_exit(); // exec执行失败返回127,注意exec只在失败时才返回现在的进程,成功的话现在的进程就不存在啦~~
}
else //父进程
{
while(waitpid(pid, &status, ) < )
{
if(errno != EINTR)
{
status = -; //如果waitpid被信号中断,则返回-1
break;
}
}
} return status; //如果waitpid成功,则返回子进程的返回状态
}

⑮进程等待

  (1)pid_t wait(int* status);

  (2)pid_t waitpid((pid_t pid, int * status, int options);

2. Linux进程间通讯(无名管道和有名管道、信号、消息队列、共享内存、信号量、套接字)

Linux进程控制理论及几种常见进程间通信机制的更多相关文章

  1. 深入剖析Linux IO原理和几种零拷贝机制的实现

    深入剖析Linux IO原理和几种零拷贝机制的实现 来源 https://zhuanlan.zhihu.com/p/83398714 零壹技术栈      公众号[零壹技术栈] 前言 零拷贝(Zero ...

  2. Linux进程通信的几种方式总结

    进程通信的目的 数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据 多个进程想要操作共享数据,一个进程对共享数据 通知事 一个进程需要向另一个或一组进程发 ...

  3. Linux Touch命令的8种常见使用方法

    Linux touch命令不仅可以用于在Linux上创建空文件. 您可以使用它来更改现有文件的时间戳,包括其访问权限和修改时间. 本文介绍了8种可以通过Linux终端使用touch命令的方案. 我们在 ...

  4. Linux产生随机数的几种常见方法

    方法1: [root@localhost ~]# echo $RANDOM 方法二 [root@localhost ~]# openssl rand -base64 7X6HMer5hhY= 方法三 ...

  5. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  6. Linux进程IPC浅析[进程间通信SystemV共享内存]

    Linux进程IPC浅析[进程间通信SystemV共享内存] 共享内存概念,概述 共享内存的相关函数 共享内存概念,概述: 共享内存区域是被多个进程共享的一部分物理内存 多个进程都可把该共享内存映射到 ...

  7. Linux下命令行cURL的10种常见用法示例

    curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,下面这篇文章主要给大家分享了在Linux中命令行cURL的10种常见用法示例,通过示例代码介绍的非常详细,需要的朋友 ...

  8. linux进程间通讯的几种方式的特点和优缺点

    # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系通常是指父子进程关系.# 有名管道 (named pipe) : 有名管道也是 ...

  9. Linux下几种常见压缩方式测试对比

    目录 Linux下几种常见压缩方式测试对比 参考 简介 测试 总结 Linux下几种常见压缩方式测试对比

随机推荐

  1. bzoj 1568 李超线段树

    博客:http://www.cnblogs.com/mangoyang/p/9979465.html 李超线段树支持两种操作:1:插入一条直线.2:询问在x = c与这些直线的交点中最大的y坐标. 插 ...

  2. vue 生命周期小结

    生命周期小结生命周期钩子的一些使用方法: beforecreate : 可以在这加个loading事件,在加载实例时触发 created : 初始化完成时的事件写在这里,如在这结束loading事件, ...

  3. Luogu 3466 [POI2008]KLO-Building blocks

    BZOJ 1112. 题意相当于在一个长度为$k$的区间内选择一个数$s$使$\sum_{i = 1}^{k}\left | a_i - s \right |$最小. 很显然是中位数. 然后只要写一个 ...

  4. 使用bat一键打开java、jar、py文件

    直接运行jar是没有命令行窗口的,如果想有命令行窗口,一般来说是要 win+r 运行cmd,定位到所在目录,然后用命令行执行 java -jar xxx.jar 而对于python,打开py文件也是麻 ...

  5. Date的转换输出

    public static void main(String[] args) { // TODO Auto-generated method stub //20131111怎么格式化成2013年11月 ...

  6. Redis集群Windows

    一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址   ...

  7. 关于Unity中的UGUI优化,你可能遇到这些问题

    https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...

  8. (vue.js)import "mint-ui/lib/stylecss"失败

    在vue2.0中引入了mint-ui后总是报一个css的错误 但是package.json中已经配置了css-loader style-loader ,webpack.config中也已经配置了css ...

  9. C#中抽象类与接口

    1抽象类 (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法 (2) 抽象类不能被实例化 (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明 ...

  10. [HAOI2012]音量调节 BZOJ2748 dp

    题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少. ...