Linux 发送信号
Posted 庖丁解牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 发送信号相关的知识,希望对你有一定的参考价值。
使用kill命令
--在命令行执行kill命令。向指定进程发送信号。
使用kill函数 int kill(pid_t pid,int sig); --参数pid指定一个要杀死的进程,而sig是要发送的信号。
//kill函数发送信号 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <signal.h> int main(int arg, char *args[]) { if(arg<2) { printf("请输入一个参数!\n"); return -1; } pid_t pid=atoi(args[1]); int resint=0; resint=kill(pid,SIGKILL); printf("返回值是%d\n",resint);//打印0 return 0; }
使用raise函数 int raise(int signum); kill函数将信号发送给进程,raise函数允许进程向自身发送信号 raise(signum)相当于kill(getpid(),signum);
alarm函数设置了一个定时器,当定时器到了给当前进程发送SIGALRM信号。 unsigned int alarm(unsigned int seconds); seconds是计时器时间到后时钟的秒数。 如果没有设置其他超时,函数返回0,否则返回值为前面安排超时中保留的秒数。 一个进程只能设置一次超时 把seconds设置为0可以取消前面的超时设置。
//捕捉信号 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <signal.h> void catch_signal(int sign) { switch(sign) { case SIGINT: //SIGINT默认行为是退出进程 printf("SIGINT signal\n"); exit(0); break; case SIGALRM: //SIGALRM默认行为是退出进程 printf("SIGALRM signal\n"); alarm(5); break; case SIGKILL: printf("SIGKILL signal\n"); break; } } int main(int arg, char *args[]) { signal(SIGINT,catch_signal); signal(SIGALRM,catch_signal); signal(SIGKILL,catch_signal); int i=0; //永远循环的alarm信号 alarm(5); while(1) { printf("hello god %d\n",i++); sleep(1); } return 0; }
abort函数 void abort(void); 该函数发送SIGABRT信号给调用进程,进程不应该忽略这个信号。 即使进程捕捉到SIGABRT这个信号,进程还是会异常退出 让进程捕捉SIGABRT的意图是在进程终止前由其执行所需的清理操作。
以上是关于Linux 发送信号的主要内容,如果未能解决你的问题,请参考以下文章