Linux信号-signal
中断处理程序处理硬件中断,信号处理程序处理信号
软中断信号(signal,简称为信号
信号可以由内核发送给一个进程,也可以由一个进程发送给另一个进程,还可以由一个进程发送给自己
Linux信号表
Linux 支持64个信号 kill -l
标准信号和实时信号
内核支持 31 个标准信号,编号为 1-31。每个信号都以 "SIG "命名,后跟一个后缀
33 种不同的实时信号。这些信号的编号为 32-64,使用 SIGRTMIN+n 符号 实时信号(real-time signal)
使用 SIGRTMAX 表示编号最大的实时信号
Linux 优先处理标准信号。对于实时信号,编号较低的信号先发送,如果一个信号类型有多个队列,则最早的一个先发送。
实时信号可以排队,如果同一个实时信号多次发送给同一个进程,它们将被排队处理,而不是像标准信号那样只能触发一次
优先级队列
2 SIGINT 中断信号,通常是CTRL-C
9 SIGKILL 强制终止进程
15 SIGTERM 终止信号,通常是kill命令发送的信号
产生来源:
01.命令行
kill -l
02.按键产生
SIGINT 对应 ctrl+c SIGSTOP 对应 ctrl+z SIGQUIT 对应 ctrl+\
03.系统调度
04.软件触发
05.硬件触发
功能:
终止接收进程:sighup、sigint、sigterm、sigkill
信号在终止进程的同时会产生内核转储:
SIGABRT(终止信号)、SIGBUS(总线错误)、
SIGILL(非法指令)、SIGSEGV(无效内存引用)、SIGSYS(不良系统调用)
有些信号会停止进程:SIGSTOP、SIGTSTP
信号的触发方式和发送时机
生命周期: 生成-传递-处理
处理:忽略信号 或终止进程,有时会进行核心转储 或停止/继续进程
命令行
ps ps aux ps -ef pstree
top htop
kill pkill killall
strace
timeout -s INT
pidof 是Linux系统中用来查找正在运行进程的进程号(pid)的工具,功能类似pgrep和ps
lsof lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口 list open files
fuser
vmstat dstat
job bg fg nohup
kill -2 <进程ID> kill -s SIGINT <进程ID> 中断信号
默认 kill -15 <进程ID> kill -s SIGTERM <进程ID> 终止信号
kill -9 <进程ID> kill -s SIGKILL <进程ID> 强制终止信号
在Linux系统中,
SIGINT 信号是一个中断信号,通常由终端上的Ctrl+C键组合按下时发送给前台进程,用于请求进程终止或中断当前操作
对当前前台进程和他的所在的进程组的每个进程都发送 SIGINT 信号-用于中断前台进程。
SIGTERM SIGTERM是由系统发送给进程的终止信号,用于请求进程正常终止允许进程在终止前完成清理工作
如果 SIGTERM 信号无法终止进程,你可以发送 SIGKILL 信号来强制终止它。
这个信号会立即停止进程,不给它任何清理或保存状态的机会。 kill -s SIGKILL <进程ID>
Linux系统编程
#include <signal.h>
signal 函数是一个较旧的函数,用于设置一个信号的处理函数
void (*signal(int sig, void (*func)(int)))(int);
sigaction 函数。这个函数提供了更多的方式来控制信号的行为。它的原型如下:
int sigaction(int sig, const struct sigaction *act, struct sigaction *oldact);
这个结构体包含了信号处理函数、信号掩码和其它选项。
Kill 函数原型如下:int kill(pid_t pid, int sig); pid参数表示进程的PID号,sig参数表示要发送的信号编号
kill 命令行 kill [options] <pid>
Linux操作系统原理
进程管理
进程创建涉及到fork()系统调用,通过复制父进程的地址空间、文件描述符等,创建一个子进程
Linux调度器根据进程的优先级和调度策略决定当前运行的进程
不同状态的进程
1.基本状态:创建-就绪-执行-阻塞-终止
2.状态之间的转换--
就绪----运行
运行--> 阻塞
运行--> 就绪
阻塞-->就绪
进程的优先级和通信
IPC: Inter Process Communication
同一进程--指针或地址
同一主机不同进程
pipe socket signal shm<shared memory>
不同主机
RPC
socket+IP
1.Linux进程通信(IPC)共享内存。用System V IPC机制或POSIX IPC机制实现
共享内存函数由 shmget、shmat、shmdt、shmctl四个函数组成
sys/shm.h
ipcs -m
可以使用命令 cat /proc/sysvipc/shm 来查看该文件的内容。
2.信号量
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负整数计数器,它被用来控制对公共资源的访问
信号量又称之为PV操作,P V原语是对信号量的操作,
一次P操作使信号量使信号量sem-1,一次V操作使信号量sem+1,
对于P操作,如果信号量的sem值小于等于0,则P操作就会阻塞,如果信号量的值大于0,才可以执行p操作进行减1
#include <semaphore.h>
semget()、semop()和semctl()进行操作
3.[defunct] 是一个特定的进程状态,表示一个僵尸进程
其他概念
示例
#! /bin/bash
Name=math
source ~/scripts/setup.bash
RESULT=/school_$(date "+%Y%m%d")/
# if目录不存在,则创建它
if [ ! -d "$RESULT" ]; then
mkdir -p "$RESULT"
fi
for ((i=0;i< 12;i++))
do
mid=/dev/shm/Exp_${Name}_$(date "+%Y%m%d%H%M%S").cord
timeout -s INT 12s cmd_you -c /grade_teacher -i 3 -m 144 -o ${mid}
mv $(find /dev/shm/ -maxdepth 1 -type f -name "*cord*") $RESULT
#less 10M文件进行删除操作
find ${RESULT} -maxdepth 1 -type f -name "Exp_*.cord*" -size -10M | xargs rm -f
done
端口和带宽
iftop 显式带宽使用情况 iotop 磁盘I/O使用状况
端口
远程和本地
网络连通
ping
端口占用
本地端口- lsof -i:9092
远程端口 telnet 10.10.10.100 9092
用telnet 去查看这个端口是否可用。
在linux/unix下使用telnet(telnet ip 端口号)
连接主机时提示“Escape character is '^]'.”
“^”是Ctrl键的意思 telnet>"代表进入了telnet命令行窗口
哪些进程打开了某个文件 lsof
操作系统原理
I/O 存储 文件 进程
并发; 共享; 虚拟; 随机
基本管理
进程/线程管理--CPU管理
存储管理
文件管理
设备管理 I/O
用户接口
新增 计算机网络
新增 账户-资源-权限
账户
account 主账号、子账号、子用户、协作者、用户组 身份凭证
身份凭证:包括登录凭证和访问证书两种,登录凭证 指用户登录名和密码,访问证书 指云 API 密钥(SecretId 和 SecretKey)
访问管理(Cloud Access Management,CAM)是腾讯云提供给您的用户和权限管理体系
RAM用户是RAM的一种实体身份类型,有确定的身份ID和身份凭证(如登录密码或AccessKey)RAM用户(即子账号)
IAM(Identity and Access Management)即身份识别与访问管理
华为云提供权限管理的基础服务,可以帮助您安全地控制华为云服务和资源的访问权限
虚拟Multi-Factor Authentication (MFA) 是能产生6位数字认证码的设备或应用程序
IAM用户 账户和密码
AK和SK
授权码
资源:Resource
名称空间(Namepsace)提供一种机制,将同一集群中的资源划分为相互隔离的组
cgroup:直接与Linux内核交互,通过创建和管理控制组来限制资源
策略:
策略:策略是定义和描述一条或多条权限的语法规范。主账号通过将策略关联到用户/用户组完成授权。
python信号量
接收信号的进程对不同的信号有三种处理方法:
指定处理函数
忽略
根据系统默认值处理, 大部分信号的默认处理是终止进程
Linux 命令行中,
可以用kill命令向对应进程发送信号,或者使用快捷键(如「CTRL-C」,Python程序会收到SIGINT信号)
Python程序中,则可借助Python的os模块 和signal :
signal包主要是针对UNIX平台(比如Linux, MAC OS),
而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号系统的功能
Python程序中,则可借助Python的os模块 和signal :
os.kill(pid, signal):向进程号pid对应进程发送signal信号量
而进程号的获取,则可以借助下面两个方法:
os.getpid():获取程序的进程ID
os.getppid():获取程序的父进程ID
import os
import signal
os.kill(os.getpid(), signal.SIGKILL)
signal包
signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示:
singnal.signal(signalnum, handler)
signalnum为某个信号,handler为该信号的处理函数
当handler为singal.SIG_DFL,进程采取默认操作(default)。
Ubuntu
命令行: gnome-system-monitor
会出现如下类似于windows中任务管理器的系统监视器
gnome-session-properties 是ubuntu的开机启动项管理器
gnome-terminal
Linux下窗口状态检可以通过X11的库来进行获取
命令行的方式获取窗口属性
xwininfo 命令根据窗口的ID获取对应的窗口尺寸信息
xdotool 是一个用于模拟键盘、鼠标和其他输入设备动作的工具,常用于自动化任务和测试环境
wmctrl
sudo apt-get install wmctrl
Linux 弹窗
notify-send ["该休息一下啦"] "喝水!伸懒腰!动一动!"
cron命令实现定时弹窗
zenity 和notify-send实现
zenity 命令用于显示图形窗口 Zenity是一个Linux下的命令行工具,
它可以生成Gtk+图形用户界面(GUI)对话框,支持多种窗口类型和选项
whiptail 是一个基于ncurses的工具,它可以帮助我们在终端中创建各种对话框
调整终端窗口的字体大小
"ctrl + shift + =" 放大终端窗口的字体
"ctrl + -" 缩小终端窗口的字体
窗口ID 进程ID
参考
华为统一身份认证服务 IAM https://support.huaweicloud.com/iam/index.html
阿里云账号的介绍与分类 https://help.aliyun.com/zh/account/product-overview/what-is-an-alibaba-cloud-account
访问管理 CAM https://www.tencentcloud.com/zh/document/product/1111/43005?lang=zh