设为首页 加入收藏

TOP

Linux守护进程基础
2014-11-24 11:42:18 来源: 作者: 【 】 浏览:0
Tags:Linux 守护 进程 基础

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


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


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


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


#include


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)


#include


pid_t setsid();


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


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


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


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


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


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


让daemon在子进程中运行。


if( pid=fork() )


{


exit(0); //父进程结束,子进程继续


}


进程组、登录会话和控制终端通常都是从父进程继承下来的,为了不受它们的影响,控制终端必须将其摆脱。具体方法是调用setsid函数。


通过if( pid=fork() ){exit(0);}将产生了子进程,能保证调用setsid的进程不是进程组中的领头进程。当setsid调用成功后,该子进程成为新会话中的领头进程和进程组的领头进程,并脱离了原来的会话、进程组和控制终端。


if( pid=fork() )


{


exit(0); //该子进程结束,又产生子进程


}


结束该子进程,产生新的子进程,此时的新子进程不是会话领头进程,所以不能打开控制终端。通过这种方式就能禁止进程打开控制终端。


进程从其父进程继承了打开的文件描述符。如不关闭,将会造成系统资源的浪费,同时,造成进程所在的文件系统无法卸载以及引起其他无法预料的错误。


max_fd = sysconf(_SC_OPEN_MAX);


for(i = 0; i < max_fd; i++)


{


close(i);


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇U-Boot 引导内核 下一篇Android下使用Socket连接网络电脑

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)
·TCP/UDP协议_百度百科 (2025-12-26 12:20:11)
·什么是TCP和UDP协议 (2025-12-26 12:20:09)
·TCP和UDP详解 (非常 (2025-12-26 12:20:06)