下载此文档

4[1].3.守护进程.Linux多进程.doc


文档分类:管理/人力资源 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
Linux进程-守护进程
【ITjob课程资料】
进程间打开文件的继承
用fork继承打开的文件
fork以后的子进程自动继承了父进程的打开的文件,继承以后,父进程关闭打开的文件不会对子进程造成影响。
示例:
#include <>
#include <>
#include <>
#include <sys/>
#include <sys/>
int main()
{
char szBuf[32] = {'\0'};
int iFile = open("./", O_RDONLY);
if(fork()== 0){ //parent process
close(iFile);
return 0;
}
wait(0);
sleep(3); //wait for parent process closing fd
if(read(iFile, szBuf, sizeof(szBuf)-1) < 1){
perror("read fail");
}else{
printf("string:%s\n",szBuf);
}
close(iFile);
return 0;
}
守护进程
进程通过终端启动,当控制终端被关闭时,相应的进程都会自动关闭。有些服务进程是没有与终端关联的,称之为守护进程(Daemon),比如: Apache和FTP,都是守护进程。d和ftpd,末尾的字母d通常就是指daemon。
daemon进程的编程规则:
创建子进程,父进程退出:
调用fork产生一个子进程,同时父进程退出。这样,原先的子进程就会变成1号进程的子进程。代码如下:
pid = fork();
if(pid>0)
exit(0);
在子进程中创建新会话:
使用系统函数setsid()。由于创建守护进程的第一步调用了fork函数来创建子进程,再将父进程退出。由于在调用fork函数的时候,子进程全盘拷贝了父进程的会话期、进程组、控制终端等,虽然父进程退出了,但会话期、进程组、控制终端并没有改变,因此,还不是真正意义上的独立开来。
而调用setsid函数会创建一个新的会话并自任该会话的组长,调用setsid函数有下面3个作用:让进程摆脱原会话的控制,让进程摆脱原进程组的控制,让进程摆脱原控制终端的控制;
会话周期:会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。
进程组:是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID(GID)也是一个进程的必备属性。每个进程都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因为组长进程的退出而受影响。进程组ID不等于父进程ID,比如:孤儿进程的父进程是1,但是进程组ID是退出的原父进程ID。进程组的好处是可以通过进程组批量杀死进程(killpg)。
控制终端:由于在linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依赖这个控制终端。
改变当前目录为根目录:
使用fork函

4[1].3.守护进程.Linux多进程 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小97 KB
  • 时间2018-03-22