Linux守护进程基础

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 18:32 点击:

1 守护进程中涉及到的基本概念


1.1进程组
1.1.1 进程组基本概念
进程组是一个或多个进程的集合,可以接收来自同一个终端的各种信号。每运行一个程序或是命令都将产生一个进程组。

每个进程属于一个进程组,而每个进程组都存在一个领头进程(或是叫组长进程),一般进程组的第一个进程是领头进程。领头进程可以创建一个进程组、创建该组中的进程。领头进程fork出的子进程也将在该进程组中,一旦子进程执行exec等退出函数就不再属于该进程组。

 


进程组的生命周期:从创建开始到最后一个进程离开为止成为进程组的生命周期。组中最后一个进程的离开可以是终止,或加入其他进程。进程组的生命周期与组长进程是否终止无关,只要有一个进程存在,进程组的生命周期就未结束。

1.1.2 相关命令
1、查看所有进程组pid(即领头进程的pid):ps –A –o pgrp= | sort |uniq

2、查看某个进程的进程组pid:ps –C 进程名 –o pgrp=

3、根据进程名获得进程pid:pidof 进程名

4、根据进程pid获得进程名:ps –aux |grep 进程pid

5、获取某个进程的具体信息:ps –ef |grep 进程名或进程pid

1.1.3 相关函数
#include <unistd.h>

pid_t getpgrp();    //获取进程组pid,即进组中的领头进程的pid,相当于调用getpgid(0)

pid_t getpid();     //获取当前进程pid

pid_t getppid();    //获取当前进程的父pid

pid_t getpgid();    //返回指定进程的进程组pid

int setpgid(pid_t pid, pid_t pgid); /*将pid进程的进程组id设置为pgid,如果两个参数相等,

                                                            *则pid指定的进程变成进程组组长。如果pid是0,则进程

                                                            *组id为pgid,如果pgid是0,则进程组id为pid。*/

int setpgrp();  //将当前进程所属的进程组的pid设置为当前进程的pid,相当于setpgid(0, 0)

1.2会话
1.2.1 会话基本概念
        一次登录形成一个会话,一个会话可包括多个进程组(www.linuxidc.com一个前台进程组和多个后台进程组),但只能有一个前台进程组。

1.2.2 相关函数
#include <unistd.h>

pid_t setsid();  

         当调用该函数的进程不是进程组的领头进程时,该函数才能建立新的会话。函数调用成功后,调用进程成为新会话的领头进程和新进程的领头进程,同时进程失去控制终端。

1.3控制终端
         进程组中有领头进程,类似地,会话中也对应有领头进程。会话的领头进程打开一个终端之后,该终端就成为会话的控制终端,与控制终端建立连接的会话的领头进程成为控制进程(session leader)。一个会话只能有一个控制终端,同时一个控制终端只能一个会话。         产生在控制端上的输入和信号(比如按下ctrl+c就会产生SIGINT信号)将发送给会话的前台进程组中的所有进程。

2守护进程及其特性
1、守护进程最重要的特性是后台运行;

2、守护进程必须与其运行前的环境脱离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录等,这些环境通常是从执行它的父进程(特别是Shell)中继承下来的。

3、守护进程可以在Linux系统启动时从脚本/etc/rc.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是Shell)执行。

3 守护进程编程
        针对守护进程的特性可以将普通进程改造为守护进程。

3.1后台运行特性
让daemon在子进程中运行。

if( pid=fork() )

{

         exit(0)

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • /etc/fstab 详解
      • nginx主主集群
      •  LVS-NAT和LVS-DR模式的实现详解
      •  RHCE考试之磁盘配额
      • 学习笔记:ACL详解
      • suse linux双网卡双网关配置
      •  LVM逻辑卷管理器
      •  Nginx主主负载均衡架构
      • ubuntu学习Mysql

      快速直达

      操作系统导航

      LinuxWindows虚拟机
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1