本文记录的是linux的信号
代码如下(示例):
signal.c
#include <stdio.h> #include <sys/types.h> #include <signal.h> #include <unistd.h> #include <sys/wait.h> //int kill(pid_t pid, int sig); int main(int argc, char const *argv[]) { int i = 0, status; pid_t pid = fork(); if(pid > 0) { //父进程 printf("我是父进程,ID:%d\n", getpid()); sleep(5); printf("父进程:准备动手!\n"); sleep(1); kill(pid, 9); printf("父进程:已经做掉!\n"); wait(&status); } else if(0 == pid) { //子进程 printf("我是子进程,ID:%d\n", getpid()); while(1) { printf("我是子进程,打我啊笨蛋!i = %d\n", i++); sleep(1); } } return 0; }
结果如图所示:
代码如下(示例):
#include <stdio.h> #include <sys/types.h> #include <signal.h> #include <unistd.h> #include <sys/wait.h> #include <signal.h> //int kill(pid_t pid, int sig); //void (*signal(int sig, void (*func)(int)) )(int); void func(int arg) { printf("这里是信号响应函数\n"); } int main(int argc, char const *argv[]) { int i = 0, status; pid_t pid = fork(); if(pid > 0) { //父进程 printf("我是父进程,ID:%d\n", getpid()); sleep(5); printf("父进程:准备动手!\n"); sleep(1); kill(pid, 3); printf("父进程:已经做掉!\n"); wait(&status); } else if(0 == pid) { //子进程 printf("我是子进程,ID:%d\n", getpid()); signal(3, func); while(1) { printf("我是子进程,打我啊笨蛋!i = %d\n", i++); sleep(1); } } return 0; }
结果如图所示: