在古老的战场上,作为信号的烽火是最有效,最直接的通讯方式。在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。
信号类型:Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有:
-
SIGKILL:杀死进程
-
SIGSTOP:暂停进程
-
SIGCHLD:子进程停止或结束时用来通知父进程
6.1 发送信号
6.1.1 函数名 kill
6.1.2 函数原形 int kill(pid_t pid, int sig);
6.1.3 函数功能 向进程发送信号
6.1.4 所属头文件
6.1.5 返回值 成功:返回0 失败:返回-1
6.1.6 参数说明 pid:pid>0,参数指向接收信号的进程 sig:指明要发送的信号
6.2 处理信号
6.2.1 函数名 signal
6.2.2 函数原形 typedef void(*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
6.2.3 函数功能 设置信号的处理方式
6.2.4 所属头文件
6.2.5 返回值 成功:返回处理函数指针 失败:SIG_ERR
6.2.6 参数说明 signum:要处理的信号
handler:对应信号的处理方式 -
SIG_IGN:忽视这个信号(不处理)
-
SIG_DFL:交给内核来处理
-
用户自定义的函数:交给用户自定义的函数来处理
小实验:
/******A程序********/
#include
#include
#include
void main(int argc, char *argv[])
{
pid_t pid;
pid = atol(argv[1]);//将字符型变量转化为整型
kill(pid, SIGINT);
}
/******B程序********/
#include
#include
#include
void myfunc()
{
printf("Process B receive SIGINT\n");
}
int main()
{
signal(SIGINT, myfunc);
pause();
return 0;
}
注:先运行bsignal.c,然后再运行asignal.c并加上bsignal.c的ID值。
用户222733 2015-5-18 09:11