LINUX进程间通信

进程间通信 (IPC机制:interprocess communicate):

同一主机进程间通信:
1. 无名管道
2. 有名管道
3. 信号
4. 共享内存
5. 消息队列
6. 信号灯

不同主机进程间通信:
7. 网络套接字

1.无名管道:用于同一主机下,具有亲缘关系的父子进程间通信。 

1. 创建一个无名管道并打开
int pipe(int pipefd[2]);
功能:
参数:
        pipefd:
                    pipefd[0] : 管道的读端
                    pipefd[1] : 管道的写端
返回值: 
          成功:0;
          失败:-1
2. 读管道:read:
3. 写管道: write
4. 关闭管道: close

2.有名管道:用于同一主机子下,任意进程间通信。

1. 默认64K大小

2. 管道存储数据时,按照FIFO的方式存储。

3. 写阻塞:管道读写端都存在时,向管道中写入数据,当管道满时,发生写阻塞。
     
    读阻塞:管道读写端都存在时,从管道中读数据,如果管道中有数据,read返回实际读到的字节数;
                     如果管道中无数据,read发生读阻塞。

    读到0:管道的写端关闭,只保留读端,从管道读数据,若有数据,则读到数据,
                  若无数据,则read返回0,不阻塞。
 
    管道破裂:管道的读端关闭,只保留写端,向管道中写入数据,发生管道破裂(异常)

1. 创建管道文件
     int mkfifo(const char *pathname, mode_t mode)
2. 打开管道文件 : open
     读端和写端必须同时打开。
3. 读写管道文件 : write/read
4. 关闭管道文件 :close
5. 删除管道文件 : remove

3.信号:

管道:同步通信

信号:进程间的异步通知(通信)机制
                    软中断

1.kill -l 查看信号类型

 2) SIGINT:ctrl + c 
        让一个进程被打断
3) SIGQUIT:ctrl + \
        让一个进程结束
9) SIGKILL:
        强制让一个进程结束
11)SIGSEGV:
        让一个进程结束(段错误)
13)SIGPIPE:
        让一个进程结束(管道破裂)
14)SIGALRM:
        让一个进程结束(定时时间到达)
17)SIGCHLD:
        子进程结束时发送给父进程
18)SIGCONT:
        让停止态的进程继续执行
19)SIGSTOP:
        让运行态的进程进入停止态(暂停)强制停止
20)SIGTSTP:
        ctrl + z   让进程进入暂停态,后台进程
        来自终端的停止信号

      用户自定义信号
      SIGUSR1
      SIGUSR2

     管理员信号:无法被捕获和忽略
      9    SIGKILL
     19    SIGSTOP 

2.发送信号

 int kill(pid_t pid, int sig);
      功能:给指定进程发送信号
      参数:
               pid:进程pid号
               sig:发送的信号编号

       int pause(void);
       功能:挂起当前进程
                   (S:可中断睡眠状态)

        可以通过发送信号的方式,唤醒pause挂起的进程,信号必须被捕获。

              unsigned int alarm(unsigned int seconds);
      功能:
        间隔seconds秒后给调用进程发送一个SIGALRM信号

3.接收信号


        1. 忽略:不处理
        2 .捕获:按照用户自定义方式处理
        3. 缺省:按照信号默认方式处(若不注册)

        1.  注册信号处理函数
             
                     typedef void (*sighandler_t)(int);

                  sighandler_t signal(int signum, sighandler_t handler);
                  功能:信号的接收方,注册一个信号处理函数
                  参数:
                             signum:注册的信号的编号
                             handler:
                                           SIG_IGN :   以忽略方式处理
                                           SIG_DFL:    以缺省方式处理
                                           函数的地址:以捕获方式处理
                     
                   返回值:
                                失败:SIG_ERR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值