8,守护进程和线程

08-守护进程和线程
学习目标
说出守护进程的特点
独立完成守护进程的创建
独立实现多个线程的创建
独立实现线程的退出和资源回收
理解线程同步的思想
1 守护进程
1.1 守护进程介绍
Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字,如vsftpd
Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。
总结守护进程的特点:
Linux后台服务进程
独立于控制终端
周期性的执行某种任务
不受用户登陆和注销的影响
一般采用以d结尾的名字
1.2 进程组和会话
进程组
进程组是一个或者多个进程的集合,每个进程都属于一个进程组,引入进程组是为了简化对进程的管理。当父进程创建子进程的时候,默认子进程与父进程属于同一个进程组。
进程组ID第一个进程ID(组长进程)。如父进程创建了多个子进程,父进程和多个子进程同属于一个组,而由于父进程是进程组里的第一个进程,所以父进程就是这个组的组长, 组长ID父进程ID。
可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。
只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。
进程组生存期:从进程组创建到最后一个进程离开
会话
一个会话是一个或多个进程组的集合。
创建会话的进程不能是进程组组长
创建会话的进程成为一个进程组的组长进程,同时也成为会话的会长。
需要有root权限(ubuntu不需要)
新创建的会话丢弃原有的控制终端
建立新会话时,先调用fork, 父进程终止,子进程调用setsid函数
可以使用ps ajx来查看进程组ID和会话ID
可以fork出几个子进程,然后查看进程组ID和会话ID
进程组和会话的关系图

1.3 创建守护进程的模型
第1步:fork子进程,父进程退出
子进程继承了父进程的进程组ID, 但具有一个新的进程ID,这样就保证了子进程不是一个进程组的组长ID,这对于下面要做的setsid函数的调用是必要的前提条件
第2步:子进程调用setsid函数创建新会话
调用这个函数以后
该进程成为新会话的首进程,是会话的会长
成为一个新进程组的组长进程,是进程组组长
不受控制终端的影响
第3步:改变当前工作目录chdir
如:a.out在U盘上,启动这个程序,这个程序的当前的工作目录就是这个u盘,如果u盘拔掉后进程的当前工作目录将消失,a.out将不能正常工作。
第4步:重设文件掩码 mode & ~umask
子进程会继承父进程的掩码
增加子进程程序操作的灵活性
umask(0000);
第5步:关闭文件描述符
守护进程不受控制终端的影响所以可以关闭,以释放资源
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
第6步:执行核心工作
守护进程的核心代码逻辑
1.4 练习
编写一个守护进程,每隔2S钟获取一次系统时间,并将这个时间写入磁盘文件。
分析:首先要按照1.3介绍的守护进行的步骤创建一个守护进程
题目要求每隔2S钟,所以需要一个定时器,2S钟触发一次,需要调用setitimer函数创建一个定时器,并且要捕获SIGALRM信号,然后在SIGALRM信号处理函数里面完成获取系统时间,然后将时间写入文件。
用到的主要知识点:
创建守护进程的模型
setitimer函数的使用
sigaction函数
文件I/O操作
获取系统时间函数time,将time_t类型转换为字符串ctime函数
2线程
2.1 什么是线程
轻量级的进程(LWP:light weight process),在Linux环境下线程的本质仍是进程。
进程:拥有独立的地址空间,拥有PCB,相当于独居。
线程:有PCB,但没有独立的地址空间,多个线程共享进程空间,相当于合租。

在Linux操作系统下:
线程:最小的执行单位
进程:最小分配资源单位,可看成是只有一个线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值