Linux9-进程间通信-管道、信号

一、进程通信

同一主机进程间通信:

1.1无名管道

当前系统默认64K大小(当管道满时,再写时按FIFO的方式存储,会发生写阻塞)

用于同一主机下,具有亲缘关系的进程间通信。

1.创建一个管道并打开 int pipe(int pipefd[2]);(pipefd[0],管道的读端,pipefd[1]管道的写端) 

2.读管道    read();

3.写管道    write();

4.关闭管道 close();

5.删除管道 remove();

1.2有名管道

用于同一主机下,具有任意关系的进程间通信。

1.创建一个管道文件

mkfifo fifo(名为fifo的管道文件)    int mkfifo(const char *pathname, mode_t mode); 

a,b两个进程都创建了一个管道文件,目的是运行任意进程。

2.打开管道文件  open(“./fifo”,)//文件名、读写执行权限

3.读写                 write/read()

4.关闭                 close()

5.删除管道文件  remove(“路径”);

读关闭只写:管道破裂为防止这种情况,读写端必须同时打开。


1.3信号

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

信号类型:kill -l

kill(pid,SIGUSR1)

2.Ctrl+C  3.Ctrl+\ 9.强制结束11.段错误 13.管道破裂 14.为进程定时,到达时间进程结束 17.子进程结束发给父进程 18.让停止态继续执行 19,让运行态停止 20.让进程暂停转后台Ctrl+Z

10/12自定义信号   9/19管理员信号 (无法被捕获和忽略)


1.3.2.接受信号

1.3.2.1.发送信号:


int kill(pid_t pid, int sig);

功能:给指定进程发送信号参数:
pid:进程pid号

Sig:发送的信号编号

  1.3.2.2 使用注册信号  

        1.1注册信号处理函数signal

        1.2忽略:不处理

        1.3捕获 : 按照用户自定义方式处理。

        1.4缺省:按信号默认方式处理(若不注册)

sighandler_t signal(int signum, sighandler_t handler);
功能:信号的接收方,注册一个信号处理函数

参数:

signnum:几号信号

handler:typede void (* sighandler_t handler)(捕获方式处理,自定义)

                SIG_IGN忽略方式处理

                SIG_DFL默认方式处理(缺省)

返回值:

        成功:函数地址

        失败:SIG_ERR

4.alarm
unsiqned int alarm(unsiqned int seconds):

功能:间隔seconds秒后给调用进程发送一个SIGALRM信号

参数:
seconds:秒数

返回值:
成功返回上次设定剩余的时间
上次未设定则返回0

5.int pause(void)

功能:挂起当前进程(可中断睡眠状态)

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


1.4共享队列

1.5消息队列

1.6信号灯

不同主机进程间通信:

1.7网络套接字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值