守护进程

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。

  1.  交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。

  2.  批处理进程和终端没有联系,是一个进程序列。

  3.  监控进程(也称系统守护进程)是Linux系统启动时运行的进程,并常驻后台。例如,httpd是著名的Apache服务器的监控进程。

 

init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。

内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 其它所有进程都是init进程的子孙。init进程是不可杀的(即不能通过kill 命令杀掉进程)!

守护进程的创建:

1 创建子进程,父进程退出。

if(fork() > 0){ exit(0) };

2 子进程变成孤儿进程,被init进程收养,子进程在后台运行。

3 子进程创建新会话。

if(setsid() < 0){ exit(-1) }

子进程成为新的会话组长,脱离原来的终端。

4 更改当前目录

chdir("/");

或 chdir("/tmp");

守护进程在后台运行,其工作目录不能被卸载需重新设定当前工作目录。

5 在子进程中调用umask()重设文件权限掩码为0。

if(umask(0) < 0){

exit(-1);

}

文件权限掩码设置为0,只影响当前进程。

6 关闭当前打开的文件描述符。

for(i=0; i < getdtablesize(); i++ ) { close(i) }

关闭所有从父进程继承的打开的文件描述符,已脱离终端,stdin/stdout/stderr无法再使用。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值