1.信号的产生是一个异步事件,从信号产生到信号递达进程需要一定时间,而在这个过程中,会因为各种原因使信号处于不同的状态。Linux系统中信号可能发生的状态有:
发送状态 阻塞状态 未决状态 递达状态 处理状态
见课本154和博客转信号
/
/
kill()函数的参数pid有4种取值,每种取值代表不同的含义。若pid<-1,则表示
见课本p156和博客转信号
、、
、、、
5.在进程的PCB中,存在两个信号集,一个称为,另一个称为。这两个信号集的实质都是位图,其中的每一位对应一个信号。
见课本p161 162 和博客转信号
signal()函数用于捕捉信号,用于发送信号的函数为kill()。
、、
、
、、
课本p154
9号信号SIGKILL和19号信号SIGSTOP不能被捕获和屏蔽和忽略。比较特殊
课本p155 信号表 和博客也有——信号
比较特殊的键盘发送信号的是
见课本p154
alarm⏲计时结束默认发送14号信号SGALRM ,默认函数结束进程
简答:
简单说明Linux系统中信号的处理方式。
信号递达进程后才可能被处理,信号的处理方式有三种:忽略、捕捉和执行默认动作。大多数信号都可以被忽略,但9号信号SIGKILL和19号信号SIGSTOP是超级用户杀死进程的可靠方法,不能被忽略,也不能被捕获。
/
/
kill()函数的参数有两个,分别为pid和sig,其中pid表示接收信号的进程的pid。
简单说明该参数的取值,以及每种取值所代表的含义。
参数pid的取值可分为4种情况,每种取值代表的含义如下:
①pid > 0,则发送信号sig给进程号为pid的进程;
②pid = 0,则发送信号sig给当前进程所属组中的所有进程;
③pid = -1,则发送信号sig给除1号进程与当前进程的所有进程;
④pid < -1,则发送信号sig给属于进程组pid的所有进程。
编程:
编写程序,在程序中创建-一个子进程,并通过信号实现父子进程交替计数功能。
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
int n = 0, flag = 0;
void sys_err(char *str)
{
perror(str);
exit(1);
}
void do_sig_child(int num)
{
printf("I am child %d\t%d\n", getpid(), n);
n += 2;
flag = 1;
sleep(1);
}
void do_sig_parent(int num)
{
printf("I am parent %d\t%d\n", getpid(), n);
n += 2;
flag = 1;
sleep(1);
}
int main(void)
{
pid_t pid;
struct sigaction act;
if ((pid = fork()) < 0)
sys_err("fork");
else if (pid > 0)
{
n = 1;
sleep(1);
act.sa_handler = do_sig_parent;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
//注册自己的信号捕捉函数,父使用SIGUSR2信号
sigaction(SIGUSR2, &act, NULL);
do_sig_parent(0);
while (1) {
/* wait for signal */;
if (flag == 1) { //父进程数数完成
kill(pid, SIGUSR1);
flag = 0; //标志已经给子进程发送完信号
}
}
}
else if (pid == 0)
{
n = 2;
act.sa_handler = do_sig_child;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
sigaction(SIGUSR1, &act, NULL);
while (1)
{
//等待信号
if (flag == 1)
{
kill(getppid(), SIGUSR2);
flag = 0;
}
}
}
return 0;
}
编译程序并执行,程序的执行结果如下:
I am parent 6101 1
I am child 6102 2
I am parent 6101 3
I am child 6102 4
I am parent 6101 5
I am child 6102 6
……
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_35629971/article/details/122147716
内容来源于网络,如有侵权,请联系作者删除!