信号通讯编程

1.核心理论

信号类型:linux系统支持的所有信号均定义在/usr/include/asm/signal.h中,其中常见的信号有:

SIGKILL:   杀死进程

SIGSTOP: 暂停进程

SIGCHLD:子进程停止或结束时用来通知父进程

2.函数学习

发送信号

函数名:kill

函数原型:int kill(pid_t pid, int sig);

函数功能:向进程发送信号

头文件:<sys/types.h> <signal.h>

返回值:成功:0  失败:-1

参数说明:pid:pid>0时指明接收信号的进程  sig:指明需要发送的信号

处理信号

函数名:signal

函数原型:typedef void(*sighandler_t)(int)

sighandler_t signal(int signum, sighandler_t handler)

函数功能:设置信号的处理方式

头文件:  <signal.h>

返回值:成功:返回处理函数指针   失败:SIG_ERROR

参数说明:signum:要处理的信号

handler:对应信号的处理方式,可以取值

1. SIG_IGN:忽略这个信号,不处理

2. SIG_DFL:交给内核去处理

3. 用户自定义的函数处理

3.综合实例

A,B进程利用信号通讯

/* bprocess.c */

#include <signal.h>
#include <unistd.h>
#include <stdio.h>

void myfunc(int a)
{
	printf("process B received SIGINT\n");
}

void main()
{
	signal(SIGINT,myfunc);
	pause();
}

# gcc bprocess.c -o bprocess
# ./bprocess
此时这个进程处于等待信号的状态
另开一个终端
# ps aux 查看bprocess的ID为11227
# kill -n SIGINT 11227
发送后bprocess进程就会打印出process B received SIGINT
 
/* aprocess.c */

#include <sys/types.h>
#include <signal.h>
#include <stdio.h>

void main(int argc, char *argv[])
{
	pid_t pid;

	pid = atoi(argv[1]);
	kill(pid,SIGINT);
}

# ./bprocess 此时处于等待信号
另开一终端
# gcc aprocess.c -o aprocess
# ps aux查看B进程的ID为11430
# ./aprocess 11430
此时bprocess进程就会打印出process B received SIGINT
时间: 2024-08-19 02:39:32

信号通讯编程的相关文章

信号通讯编程,王明学learn

信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有: SIGKILL:杀死进程 SIGSTOP:暂停进程 SIGCHLD:子进程停止或结束时用来通知父进程 二.函数学习 2.1 发送信号 2.1.1 函数名 kill 2.1.2 函数原形 int kill(pid_t pid,int sig); 2.1.3 函数功能 向进程发送信号

第三季-第15课-信号通讯编程

第15课-信号通讯编程 15.1 核心理论 1. 信号 在古老的战场上,信号是最有效,最直接的通讯方式:在linux系统中,信号(signal)同样也是最古老的进程间通讯机制. 2. 信号处理流程 进程A/内核---(1)选择信号-----(2)发送信号-----(3)处理信号----进程B. 3. 信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有: SIGKILL:杀死进程 SIGSTOP:暂停进程 SIGCHLD:子进

[转] C#.Net Socket网络通讯编程总结

1.理解socket1).Socket接口是TCP/IP网络的应用程序接口(API).Socket接口定义了许多函数和例程,程序员可以用它们来开发TCP/IP网络应用程序.Socket可以看成是网络通信上的一个端点,也就是说,网络通信包括两台主机或两个进程,通过网络传递它们之间的数据.为了进行网络通信,程序在网络对话的每一端都需要一个Socket. 2).TCP/IP传输层使用协议端口将数据传送给一台主机的特定应用程序,从网络的观点看,协议端口是一个应用程序的进程地址.当传输层模块的网络软件模块

串口通讯编程中涉及到的字符串处理关键字及处理字符串对应函数

一   字符串处理关键字总结 作用 关键字 比较两个字符串. StrComp 变换字符串. StrConv 大小写变换. Format, LCase, UCase 建立重复字符的字符串. Space, String 计算字符串长度. Len 设置字符串格式. Format 重排字符串. LSet, RSet 处理字符串. InStr, Left, LTrim, Mid, Right, RTrim, Trim 设置字符串比较规则. Option Compare 运用 ASCII 与 ANSI 值.

linux_c开发(5-3)进程间通讯_信号通讯

信号通讯 信号(signal)机制是UNIX系统中最为古老的进程间通信机制,有很多条件可以产生一个信号: 1. 当用户按某些按键时,产生信号. 2. 硬件异常产生信号:除数为零,无效的存储访问等等.这些信号通常有硬件检测得到,将其通知内核,然后内核产生适当的信号通知进程,例如: 内核对正在访问一个无效存储区的进程产生一个SIGSEGV信号. 3.进程用kill函数将信号发送给另一个进程. 4. 用户可以用kill命令将信号发送给其他进程. 信号类型 几种常见的信号 SIGHUP: 从终端发来的结

通讯编程入门--WEBSOCKET

C#通讯编程入门--WEBSOCKET WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using System.Text.RegularExpressions; using System.Secur

天地币:所用到的 Android Socket 通讯编程技术试验

1.为了开发"天地币"这个Android手机项目,须要用到Socket编程. 2.天地币是一种类似于比特币的虚拟货币. 3.为了赚取CSDN的C币,须要写篇博客. 4.干脆将调试Socket的项目发出来跟网友分享. 闲话休提,直接上代码,首先是字符串的定义: <? xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name&

13.无名管道通讯编程

? 1.进程间的通信: Linux作为典型的多进程操作系统,进程与进程之间肯定需要信息交流,这就需要进程通信. 2.进程通信的目的: ????1.数据传输:一个进程需要将数据发送给另一个进程. ????2.资源共享:多个进程之间共享同样的资源. ????3.通知事件:一个进程需要向另一个/组进程发送信息,通知他们发生了某些事情. ????4.进程控制:有些进程希望完全控制另一个进程的执行,例如Debug进程.此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道他的状态改变. ? 3.通讯

初步理解Python进程的信号通讯

Reference: http://www.jb51.net/article/63787.htm 信号的概念 信号(signal)--     进程之间通讯的方式,是一种软件中断.一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号. 几个常用信号: SIGINT     终止进程  中断进程  (control+c) SIGTERM   终止进程     软件终止信号 SIGKILL   终止进程     杀死进程 SIGALRM 闹钟信号进程结束信号 SIGTERM和SIGKILL的区