首页 > 代码库 > 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 发送信号