linux系统中signal函数结束进程

当系统中运行一个服务端进程后通过ctrl+z并不结束进程,但当再次起该服务后该服务无法运行,需查找该服务的进程id通过kill指令结束该进程,本次通过在源码中加入signal函数,在服务运行过程中按下ctrl+z即可完全结束该进程。

一、头文件引用

#include <signal.h>

二、指针函数的声明 

signal函数一个参数是一个函数指针,而类中成员函数的地址需要一个隐含的this指针来调用。 为了解决这个问题,可以使用静态成员函数或者全局函数作为信号处理函数。加入static关键词声明该函数为静态函数可作为signal的参数,也可通过typedef定义该函数。

static void SignalHandler(int signum) {
    if (signum == SIGTSTP) {
      std::cout << "Received SIGTSTP. exiting..." << std::endl;
      exit(0);
    }
}
typedef void (*SignalHandler)(int);
void SignalHandler(int signum) {
    if (signum == SIGTSTP) {
      std::cout << "Received SIGTSTP. exiting..." << std::endl;
      exit(0);
    }
}

三、主函数的调用

int main() {
    signal(SIGINT, SignalHandler);
    while(1){
        // 服务线程
        ..........
        ..........
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    };
    return 0;
}

 在主函数中包含一个服务端线程,按下ctrl+z后进程就会完全结束,无需手动去kill进程。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值