
这个例子里面其实是将异常退出处理和正常退出处理结合起来了。对于SIGTERM(即kill进程)和SIGINT(即ctrl-c结束前台进程),我们当做是正常退出,在其信号处理函数里面,直接调用了exit(0),而exit(0)又会被server_on_exit捕获到。对于异常退出也是类似,只是调用了exit(-1)表示是异常的。同时异常退出我们会打印出当前的进程堆栈信息,server_backtrace的实现下一篇再说。另外注意的是SIGKILL信号是无法捕获的。而调用abort导致的退出,也是通过SIGABRT信号捕获到进行处理了。其他几种异常退出的信号也是比较常见,一并捕获到进行处理。这样对于异常退出,我们即可统一的log堆栈信息,又可直接继续正常退出时的处理流程了。
在linux系统中停止进程需要以下三个步骤,下面具体介绍以下:1、打开进程id,用ps命令查找进程,使用-e 选项。通过less的方式输出
2、找到进程,通过grep将ps的输出通过管道传输,并指定该进程的名称。
3、找到要终止的进程,然后通过kill命令来停止进程。
今天的分享就是这些,希望能帮助大家。
本文章基于thinkpadE15品牌、centos7系统撰写的。
pause函数使调用进程挂起直至捕捉到一个信号。#include
int
pause(void)
返回:-1,errno设置为EINTR
只有执行了一个信号处理程序并从其返回时,pause才返回。
/*************************************
使用alarm函数定时,然后通过pause()等待alarm函数的信号。
1:使用alarm函数的时候要注意alarm函数的覆盖性,即在一个进程中采用一次alarm函数则该进程之前的alarm函数将失效。
2:pause函数为将进程挂起,然后等待信号。
3:因为alarm函数在定时器到点的时候产生的信号默认为让该进程退出。因此本代码运行5秒然后直接退出,终端不会输出printf中的语句。
tips:挂起和阻塞的区别为,挂起是进程主动行为,阻塞是进程的被动行为。
*************************************/
#include
#include
#include
int
main(int
argc,char
*argv[])
{
int
ret
ret=alarm(5)
pause()
printf("will
this
be
printed?\n")
}
#include
#include
#include
int
main()
{
int
ret
ret=alarm(5)
pause()
printf("I
have
been
waken
up.\n",ret)
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)