linux下的守护进程

一、什么是守护进程

守护进程的引入

现实中许多大小的服务器或者软件必须保证7*24小时无障碍运行,例如百度搜索引擎等,这些一直运行的程序怎么实现的呢? 本质就是守护进程

守护进程的定义

守护进程是运行在后台的一种特殊进程,独立于控制终端并且周期性的执行某种任务或处理某些突发事件。
Linux的大多数服务器是守护进程实现的,比如Web服务器httpd,Internet服务器inetd。

守护进程的特点
Linux系统启动时会启动很多系统服务进程,
1、这些进程不能直接和用户交互,
2、脱离终端并且在后台运行,
3、不受用户登录和注销的影响,一直运行。
4、守护进程自成进程组,自成会话

二、守护进程的创建

1、查看系统中的进程

ps axj

a:所有进程
x:   显示控制终端的进程和无控制终端的进程
j :   列出与作业控制相关的信息

这里写图片描述
TPGID 一列 -1 表示为不受终端控制的进程也就是守护进程
COMMAND 一列 【】表示内核线程,这些线程在内核创建,没有用户空间代码,因此没有程序文件名和命令行

2、setsid函数
创建新会话

//调用setsid函数创建一个新的Session并成为Session Leader
#include<unistd.h>
pid_t setsid(void);

返回值: 调用成功返回新创建的Session的id,出错返回-1

2》注意:调用这个函数之前,当前进程不允许是进程组的Leader,否则该函数返回-1
解决方法:先fork出子进程,在子进程中调用setsid(进程组的第一个进程是Leader,子进程必然不是进程组的Leader)

调用系统函数daemon创建守护进程

#include<unistd.h>
int daemon(int nochdir, int noclose);

1、daemon函数用户脱离控制台,以守护进程的形式在后台运行
2、nochdir为0,daemon将更改当前进程的目录为根目录
3、noclose为0,进程的STDIN,STDOUT,STDERR,写入的所有数据直接丢弃

#include<unistd.h>
#include<stdio.h>

int main()
{
    daemon(1,1); //创建守护进程
    while(1);
    return 0;
}

三、如何杀死守护进程?

1、ps axj | grep 守护进程名字 找到对应的进程id kill -9 进程id
2、创建shell脚本对进程的启动、关闭、重启进行自动管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值