linux——11进程间通讯

本文详细介绍了进程间通信的两种主要方式——管道和信号。管道分为无名管道和有名管道,前者用于具有亲缘关系的进程间单向数据传递,后者允许读写两端同时加入。信号是一种异步通信方式,包括多种类型,如SIGINT、SIGKILL等,可以被捕捉、忽略或按默认方式处理。通过对信号的处理,可以实现进程的控制和交互。
摘要由CSDN通过智能技术生成


前言

一、进程间通讯

共有两大类通讯方式
在这里插入图片描述

二、通讯方式

管道:文件、视频、压缩包都可以发送 同步
信号:只是一个通知 异步

1.无名管道

	1.无名管道:相当于在内核空间建设一个文件缓存区,在进程间进行单向数据传递,创建一个文件描述符,一端只能读,一端只能写。
		只能用于具有亲缘关系之间的进程间通讯  
	函数接口:
	(1int pipe(int pipefd[2]); 
	功能:
		创建无名管道
	参数:
		数组的首地址
	返回值:
		成功返回0;
		失败返回-1;
	(2)特性
	A.读特性
		管道中至少存在一个写段
		读:管道中存在数据,直接读出
			管道中没有数据等待直到有数据写入才读出,会阻塞等待
		管道中没有写端
		读:管道中存在数据,直接读出
			管道中没有数据,直接结束,不会等待	
	B:写特性
		管道中至少有一个读端
		写:管道如果没有写满(64k),则会继续写入
			管道如果满了则会阻塞等待,直到数据被读出,才能继续写入。
		管道中没有读端
		写:会触发管道破裂,收到管道破裂信号,进程异常结束
	2.有名管道

2.有名管道

	读写两端必须同时加入
	1.创建管道
	int mkfifo(const char *pathname, mode_t mode);
	功能:
		创建有名管道
	参数:
		pathname:管道名字
		mode:权限
	返回值:
		成功:返回0;
		失败:返回-1

3.信号

信号是一种异步通信方式

	1.信号类型
1) SIGHUP	     2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	
	2.信号处理方式
	1.缺省      按照默认方式处理信号
	2.忽略		不处理信号
	3. 捕捉		按照执行方式处理
	3.特殊信号
	(1)可以从键盘上发送得信号
	SIGINT	 ctrl + c   程序结束
	SIGQUIT	  ctrl + \ 
	SIGTSTP   ctrl + z  任务挂起
	(2)无法被捕捉的信号,收到必须响应
	SIGKILL	   杀死
	SIGSTOP	暂停
	(3)常用信号
	SIGSEGV	段错误
	SIGPIPE	管道破裂
	SIGCHLD	子进程结束 父进程会收到SIGCHLD信号,用于回收子进程空间
	SIGIO	异步IO信号	
	4.修改信号处理方式
	函数接口
	(1typedef void (*sighandler_t)(int);
   sighandler_t signal(int signum, sighandler_t handler);
	功能:
	修改信号的处理方式
	参数:
	signum修改信号的编号
	信号处理函数:
		SIG_DFL,缺省  按照默认是方式进行处理
		SIG_IGN,忽略
	返回值:
	成功返回上一次注册处理函数地址
	失败返回SIG_ERR
	(2int raise(int sig)
	功能:
	给调用进程发送信号
	参数:
		sig:信号的编号
	返回值
		成功返回0
	失败
		返回非03int pause(void)
	功能:
		 让任务挂起
	参数:
		缺省
	返回值:
		当收到信号时返回-14unsigned int alarm(unsigned int seconds)
	功能:
		给调用进程在seconds秒之后发送SIGALARM
	参数:
		seconds;秒数值
	返回值:
		成功返回上一次定时剩余得秒数
		失败返回
	sleep = pause + alarm
	(5int kill(pid_t pid, int sig);
	功能:
		给进程发送信号
	参数:
		pid:进程得pid号
		sig:信号的编号
	返回值
		成功返回0;
		失败返回-1

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值