当前位置:首页 > 芯闻号 > 充电吧
[导读]1、Kill:调用kill函数终止进程#include#includeint kill(pid_t pid, int signum);功能:给指定的进程发送编号为signum的信号。返回值:成功返回0

1、Kill:调用kill函数终止进程

#include

#include

int kill(pid_t pid, int signum);

功能:给指定的进程发送编号为signum的信号。

返回值:成功返回0,失败返回-1.

>> pid的取值有4种情况:

1)pid>0:将信号传送给进程ID为pid的进程。(单个进程)

2)pid=0:将信号传送给当前进程所在进程组中的所有进程。

3)pid=-1:将信号传送给系统内的所有进程。

4)pid<-1:将信号传给指定进程组的所有进程,这个进程组号等于pid的绝对值。


2、Alarm

#include

unsigned int alarm(unsigned int seconds); //类似定时自杀,定时器。只是设置,并不会阻塞。

功能:在seconds秒之后,向调用进程发送一个SIGALRM信号,SIGALRM信号的默认动作是终止调用alarm函数的进程。

返回值:若以前没有设置过定时器,或设置的定时器已超时,返回0.否则返回定时器剩余的秒数,并重新设置定时器。

3、Raise

#include

int raise(int signum);

功能:给当前进程/调用raise的进程本身送一个信号。

参数:signum是信号的编号

返回值:成功返回0,失败返回-1.

用kill函数也可以实现此功能,kill加上自己的pid。Kill不仅可以给自己发信号,还可以给别人发信号。 

4、Abort:是一个库函数

#include

void abort(void);

功能:向进程发送一个SIGABRT信号,默认情况下进程会退出。

注意:即使SIGABRT信号被加入阻塞集,一旦进程调用了abort函数,进程也还是会终止,且在终止前会刷新缓冲区,关文件描述符。

5、Pause

#include

int pause(void);

功能:将调用进程挂起(阻塞)直至捕捉到信号为止。这个函数通常用于判断信号是否已到。

返回值:直到捕获到信号,pause函数才返回-1,且errno被设置成EINTR。

一个进程收到一个信号的时候,可以用如下方法进行处理:

1>执行系统默认动作:对大多数信号来说,系统默认动作是用来终止该进程。

2>忽略此信号:接收到此信号后没有任何动作。

3> 执行自定义信号处理函数:使用用户自己定义的信号处理函数处理该信号。程序中可用函数signal()改变信号的处理方式。

#include#include#includevoid signal_handler(int sign)
{
        if(sign == SIGINT)//Ctrl + C
                printf("rev SIGINTn");
        if(sign == SIGQUIT)//Ctrl +  //
                printf("rev SIGQUITn");
}

int main(int argc,char * argv[])
{
        printf("wait for SIGINT or SIGQUIT.n");
        signal(SIGINT,signal_handler);
        signal(SIGQUIT,signal_handler);
        pause();
        pause();
        return 0;
}

运行结果如下:


按ctrl+c,打印SIGINT。

按ctrl+ , 打印SIGQUIT。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭