Linux:信号的使用

信号:通知进程产生了某个事件

9号杀死信号无法被修改,防止进程无法结束

信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。

与信号有关的系统调用在“signal.h”头文件中有声明

常见信号的值,及对应的功能说明:

在这里插入图片描述

信号的值在系统源码中的定义如下:

#define SIGHUP 1
#define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8

#define SIGKILL 9 //该信号的响应方式不允许改变
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13 //读端关闭的描述符,写端写入时产生,该信号会终止程序
#define SIGALRM 14
#define SIGTERM 15 //系统 kill 命令默认发送的信号
#define SIGSTKFLT 16
#define SIGCHLD 17 //子进程结束后,会默认给父进程发送该信号
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23

修改信号的响应方式 – signal()

[外链图片转存中...(img-ilhlhDBg-1638372561124)]

第一个参数信号的名字
第二个调用信号的函数

有三种类型:
忽略1

默认0

自定义

相当于一个定义,不是每次都会执行,只有当键盘输入该信号时才会运行,这个定义也可以重新定义。

#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>
void fun(int sig)
{
    printf("sig=%d\n",sig);
    signal(SIGINT,SIG_DFL);
}
int main()
{
    signal(SIGINT,fun);
    while(1)
    {
        printf("cao\n");
        sleep(1);
    }
}

发送信号 – kill() 系统命令kill本质是向进程发命令

kill() 可以向指定的进程发送指定的信号:
int kill(pid_t pid, int sig);
pid > 0 指定将信号发送个那个进程
pid == 0 信号被发送到和当前进程在同一个进程组的进程
pid == -1 将信号发送给系统上有权限发送的所有的进程
pid < -1 将信号发送给进程组 id 等于 pid 绝对值,并且有权限发送的所有的进程。
sig 指定发送信号的类型。

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
//  ./mykill  3445 2
int main(int argc,char *argv[])
{
   if(argc!=3)
   {
       exit(0);
   }
   int pid=atoi(argv[1]);
   int sig=atoi(argv[2]);
   if(kill(pid,sig)==-1)
   {
       printf("killerror\n");
   }


}

### SSL与TLS的区别 SSL(Secure Sockets Layer)和TLS(Transport Layer Security)都是为了保障互联网上的数据传输安全而设计的安全协议。然而,随着技术的发展,TLS逐渐取代了SSL成为新的标准。 #### 协议版本演进 最初发布的SSL 1.0从未公开发布过;SSL 2.0于1995年推出,存在多个已知的安全弱点;随后推出的SSL 3.0虽然改进了许多方面但仍不够完善[^1]。TLS作为SSL的正式继承者,在1999年开始被标准化并不断迭代升级至当前最新的TLS 1.3版本[^4]。 #### 安全特性对比 - **加密强度**:TLS采用了更先进的加密算法和技术,提供了更强的数据保护能力。例如,TLS支持前向保密(Forward Secrecy),即使长期密钥泄露也不会影响过去会话的安全性。 - **握手流程优化**:相较于早期的SSL版本,TLS简化了握手过程中的一些复杂度,并增强了消息验证机制以防止中间人攻击等问题的发生。 - **性能提升**:TLS减少了不必要的计算开销,提高了连接建立的速度,尤其是在移动设备和其他低功耗平台上表现更为明显。 - **兼容性处理**:尽管两者都遵循相同的总体框架结构,但在具体实现细节上有很大区别。现代浏览器和服务端通常默认仅启用较高版本的TLS协议,不再接受旧版SSL连接请求,从而降低了潜在风险。 ```python import ssl context = ssl.create_default_context() # 设置最低 TLS 版本为 1.2 或更高 context.minimum_version = ssl.TLSVersion.TLSv1_2 ``` ### 应用场景分析 对于大多数Web服务而言,默认推荐使用最新稳定版本的TLS协议来进行客户端与服务器之间的通讯加密。这是因为: - 更高的安全性; - 改进了效率和支持更多功能; - 广泛得到主流操作系统、编程库的支持。 不过,在某些特殊情况下也可能遇到需要向下兼容的需求——比如老旧系统的维护或者特定行业内的定制化解决方案,则需谨慎评估是否继续沿用较低级别的SSL/TLS配置选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小新 蜡笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值