热度 22
2015-3-8 19:17
1086 次阅读|
1 个评论
在古老的战场上,作为信号的烽火是最有效,最直接的通讯方式。在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:pid0,参数指向接收信号的进程 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 );//将字符型变量转化为整型 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值。