linux操作系统笔记

1
waitpid(pid,statu, )   //指定某一个进程进行回收

进程间的通信方式

僵尸进程

  1. 有影响新进程的产生
  2. 保存了很多进程中的信息

weit3()

库函数system()

c语言中实现调用shell
system()
原理:

  1. fork产生一个子进程
  2. exce执行相关shell命令
  3. 子进程用exit推出子进程
  4. 。。。。。。

进程的通信

  • 软中断
  • 管道(使用最简单)
  • 信号量(开销小)
  • 共享映射区(无血缘关系)
  • socket(最稳定)

1.管道通信

  1. 本质是一个伪文件(不占用磁盘空间)
  2. 有读端和写端
  3. 结构为一个环形队列
  4. pipe()为系统调用
    1
    2
    3
    int p[2]
    status = pipe(p)
    //p[0]用于从管道写,p[1]用于从管道读
  • 特点:
    • 管道默认是阻塞的
    • 管道适用于与血缘关系的进程

信号量(pv操作)

消息队列

共享内存(能实现大量数据传输,解决了消息队列的弱点)

  1. 基本流程
    1. 获取物理内存
    2. 映射到虚拟地址空间
    3. 使用后释放
  2. ipcs 命令
    1. ipcs -m 查看系统中存在的共享内存
    2. ipcrm shm 杀掉共享内存

文件映射 mmap(文件映射到虚拟空间中)

  1. 特点
    1. 普通读文件先从硬盘到内核缓存,再到物理内存共进行了两次拷贝
    2. mmap操作直接从硬盘拷贝到物理内存,只进行了一次拷贝
  2. 常见错误
    1. len = 20 ,filelength = 0 :产生BusError总线错误
    2. 文件只有只读权限,映射内存也为只读权限:产生段错误,无写权限
    3. 文件和映射内存都只有只写权限:产生读错误
    4. offset 9
    5. 越界:

信号(常见信号为1到31)

信号的产生

  1. 按键产生:
    • ctrl+c 2号
    • ctrl+z 1号
    • ctrl+\ 3号
  2. kill(pid_t pid , int sig);
  3. sigprocmask 函数 :屏蔽信号,接触屏蔽

信号捕捉特性

  1. 信号执行期间,信号屏蔽字有mask -> s_mask
  2. 某信号执行期间,某信号自动被屏蔽
  3. 阻塞信号不支持排队

SIGCHLD信号

  1. 条件
    • 子进程终止
    • 子进程接收到SIGSTOP信号
    • 子进程接收到continue信号

守护进程

  1. 特点:
    • 独立于控制终端
    • 周期性执行某任务
    • 不受用户登陆注销影响
    • 一般采用以d结尾的名字
  2. 进程组
    *
  3. 会话
    *