进程间通信 | 信号通信Ⅰ

学术   科技   2023-05-22 08:34   北京  

概念

    1)信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式

    2)信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。

    3)如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。

用户进程对信号的响应方式

    1)忽略信号:对信号不做任何处理,但是有两个信号不能忽略:即SIGKILL(杀死)及SIGSTOP(暂停)。

    2)捕获信号:定义信号处理函数,当信号发生时,执行相应的处理函数,SIGKILL和SIGSTOP也不能被捕获

    3)执行缺省操作:Linux对每种信号都规定了默认操作

典型信号

相关函数

1)int kill(pid_t pid, int sig);

功能:信号发送

参数:pid:指定进程

sig:要发送的信号

返回值:成功 0;失败 -1

2)int raise(int sig);

功能:进程向自己发送信号

参数:sig:信号

返回值:成功 0;失败 -1

3)unsigned int alarm(unsigned int seconds)

功能:在进程中设置一个定时器

参数:seconds:定时时间,单位为秒

返回值:如果调用此alarm()前,进程中已经设置了闹钟时间,则返回上一个闹钟时间的剩余时间,否则返回0。

注意:一个进程只能有一个闹钟时间。如果在调用alarm时已设置过闹钟时间,则之前的闹钟时间被新值所代替

4)int pause(void);

功能:用于将调用进程挂起直到收到信号为止。

5)void (*signal(int signum, void (*handler)(int)))(int);

或者:

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);

功能:信号处理函数

参数:signum:要处理的信号,不能是SIGKILL和SIGSTOP

handler:SIG_IGN表示忽略该信号;SIG_DF表示采用系统默认方式处理信号;自定义的信号处理函数指针.

返回值:成功:设置之前的信号处理方式;失败:SIG_ERR

 6void abort(void);

给自己发送异常终止信号,(6.SIGABRO)终止并产生core文件。

控制工程研习
好好学习,天天向上
 最新文章