Linux-进程管理-信号-signal

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	  
posted @ 2024-09-25 17:02  辰令  阅读(106)  评论(0)    收藏  举报