如何终结服务器进程

windows下面可以主线程while loop接受input;但是觉得很丑。

linux没办法这样,可以用注册信号的办法。实现起来也不难:

#include "stdio.h"
#include "unistd.h"
#include "signal.h"
#include "error.h"

volatile bool isStop = false;

static void handle_sig(int signum)
{
    if (SIGUSR1 == signum) {
        isStop = true;
        printf("get sig %d and stop app\n", signum);
    }
}

int main()
{
    struct sigaction sga;
    sga.sa_flags = 0;
    sga.sa_handler = handle_sig;

    sigaction(SIGUSR1, &sga, NULL);

    while (true) {
        if (isStop)
            break;
    }

    printf("do some clean work here!\n");
}

后台运行,然后干掉它的时候发送kill -USR1 进程ID就行了。

如何终结服务器进程,码迷,mamicode.com

时间: 2024-11-10 14:13:22

如何终结服务器进程的相关文章

oracle 的服务器进程(PMON, SMON,CKPT,DBWn,LGWR,ARCn)

来着TOM的<oracle 编程艺术 9i,10g,11g> PMON PMON,进程监视.PMON主要有3个用途: 1,在进程非正常中断后,做清理工作.例如:dedicated server失败了或者因为一些原因被杀死,这是PMON的工作分两种.第一,是对dedicated server所做的工作进行恢复或撤销.第二:是释放dedicated server占用的资源.PMON会把失败进程的未提交的工作进行rollback,释放锁,释放SGA空间 2,在进程abort后,PMON进行清理工作.

关于linux服务器进程监控及自动重启的简单方案

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 本周开始,新手游进行删档封测阶段,前两天表现还好,今天更新后出现几次宕机行为,比较影响玩家的测试和体验,我们的服务器管理系统尚未完善,为了晚上能够预防宕机造成损失,先用一种简单的方案临时顶替一下. 实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则处理我们预设的脚本. 首先我们要向crontab加入一个新任务. # crontab -e:进入编辑状态,其实就是使

系统无法开始服务器进程。请检查用户名和密码。 (Exception from HRESULT: 0x8000401A)

开始-运行-cmd,输入aspnet_regiis.exe -i 重新注册iis 或者 出现以下错误:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开始服务器进程.请检查用户名和密码. (异常来自 HRESULT:0x8000401A). 解决方案:1. 开始-dcomcnfg,启动组件服务.2. 找到Microsoft Excel Applic

监视与记录本地服务器进程/端口占用带宽流量

由于公司的问题排查需求,需要将公网服务器上占用带宽流量较高的进程或者端口进行记录和保存,以便以后查询问题时可以进行核实. 这个问题纠结了1.2天,使用python应该是可以满足需求,奈何本菜鸟的python实在是拿不出手,所以只能依靠Linux成品的小工具与Shell来实现了. Linux上的iftop与nethogs两个工具比较符合要求,但是这两个工具都无法完美的将内容记录下来,如果使用重定向的方式记录内容,那么记录下来的东西并不是文本格式,使用cat查看是没问题的,但是想要进行编辑或者过滤,

freeswitch服务器状态web端监控(可以更换为任意服务器进程)

首先在监控服务器上创建一个数据库monitor: mysql -h172.16.150.23 -uroot -proot create database monitor; use monitor; mysql> create table servers ( id int not null primary key auto_increment, hostname varchar(20), ip varchar(64), cpuload varchar(64), rootpartion varcha

linux僵死进程与并发服务器编程

序 僵死(zombie)进程简而言之就是:子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程. 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源.对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求.如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源.如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能. 查

守护进程与远程登录服务器

1.在Red Hat7版本中,系统启动和服务器进程由systemd进行管理 systemctl命令用于管理各种类型的systemd对象,它们称为单元. systemctl -t help 显示可用单元类型列表. 一些常见的单元类型: (1).服务单元具有.service扩展名 (2).套接字单元具有.socket扩展名 (3).路径单元具有.path扩展名 2.常见命令 常见的systemctl控制命令: 命令 解释 systemctl stop UNIT 停止一项服务 systemctl st

服务器程序后台化以及守护进程的编写规范

一般的服务器程序都是以后台进程(守护进程)的方式运行,那么要如何使得服务器进程后台化呢? 下面介绍守护进程的编写遵循的步骤: 1. 创建子进程,关闭父进程:2. 设置文件权限掩码.当进程创建新文件(使用open(const char *pathname, int flags, mode_t mode)系统调用时,文件的权限将是mode&0777: 3. 创建新会话,设置本进程为进程组的首领: 4. 切换工作目录: 5. 关闭标准输入设备.标准输出设备和标准错误输出设备: 6. 关闭其他已经打开的

基于进程池的多进程服务器通信

代码来源:游双的linux高性能服务器编程 主进程创建一个进程池,当有客户端发送请求时,主进程选择一个进程与该客户端进行通信,为了简单期间,去掉了一些信号处理代码,其中信号的用法可以参考基于多进程的网络聊天程序 服务器代码如下: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h&