Linux系统编程@进程管理(二)
1、创建守护进程(Deamon)
守护进程的概念与作用
后台服务程序 – 系统服务,进程名字往往以’d’结尾,生存周期比较长(系统装入时启动,关闭时候终止。系统装入两种启动方式:1从启动脚本、etc/rc.d中启动;2由作业规划进程crond启动。也可以从用户终端启动,且独立于控制终端),周期性执行某种任务或等待处理某些发生的事件。
例如:httpd ftpd lqd crond
控制终端:从一个终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端。当控制终端关闭,依附于该终端的进程都会自动关闭;守护进程除外,避免不必要的干扰和交互。
守护进程创建过程
1.让init进程成为新产生进程的父进程
让进程在后台执行
创建子进程,父进程退出(所有的工作都在子进程中执行,子进程为孤儿进程)
pid=fork(); if(pid>0) exit(0);
进程组(作业控制)
在Linux系统中,所有的进程都属于各自的进程组;进程组是一个或多个进程的集合;每个进程组都有进程组Id,由领头进程的进程号决定;进程组的存在与否与领头进程是否存在没有关系。
子进程一旦运行exec就会不再属于原来的进程组。
会话(控制终端)
一个或多个进程组的集合;一个登陆shell发起的会话,一般由一个会话首进程、一个前台进程组、多个后台进程组组成。
会话首进程:新建会话时,会话中的唯一进程,其PID=SID;它通常是一个登陆shell;进程成为孤儿进程后调用setsid()成为一个新会话。
Question:
如何查看系统中正在运行的守护进程有哪些?
找出系统中名字以‘d’结尾的进程:$ ps -el | grep d$
找出系统中名字以‘k’开头的进程:
在一组进程中如何判断哪个进程是组长?
2.调用setsid函数
3.更改当前工作目录
4.关闭文件描述符,并重定向标准输入、输出和错误输出
5.设置守护进程的文件权限创建掩码