信号概念
- 1-31:非实时信号。发送的信号可能丢失。信号无优先级。不支持信号排队。
- 31-64 :实时信号。发送的信号都会被接受,支持信号排队。
- 信号记录在:
/usr/include/bits/signum.h
ps命令显示STAT的类型
-
R Running.运行中
-
S Interruptible Sleep.等待调用
-
D Uninterruptible Sleep.等待磁盘IO
-
T Stoped.暂停或者跟踪状态
-
X Dead.即将被撤销
-
Z Zombie.进程已经结束,仅映像名留存
-
W Paging.内存交换
-
N 优先级低的进程
-
< 优先级高的进程
-
s 进程的领导者
-
L 锁定状态
-
l 多线程状态
-
休眠进程
- Interruptible Sleep(可中断睡眠,在ps命令中显示“S”)。处在这种睡眠状态的进程是可以通过给它发送signal来唤醒的
-
Uninterruptible Sleep(不可中断睡眠,在ps命令中显示“D”)。处在这种状态的进程不接受外来的任何signal,这也是为什么之前我无法用kill杀掉这些处于D状态的进程,无论是“kill”, “kill -9”还是“kill -15”,因为它们压根儿就不受这些信号的支配。
-
S+
-
+号的意思
-
信号可靠性
signal
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void sig_handler(int signo)
{
printf("%d, %d occred\n",getpid(),signo);
}
int main()
{
// 向内核登记信息处理函数以及信号值
if(signal(SIGTSTP,sig_handler)==SIG_ERR)
{
// SIGTSTP CTRL+Z 程序停止
perror("signal sigttstp error");
}
if(signal(SIGINT,sig_handler)==SIG_ERR)
{
// CTRL+C 程序中断
perror("signal sigint error");
}
for(int i =0;i<30