首页 > 代码库 > Linux 发送信号
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 发送信号
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。