[Linux系统编程]进程组和会话,守护进程

一.进程组

进程组,也称之为作业。BSD于1980年前后向Unix 中增加的一个新特性。
代表一个或多个进程的集合。每个进程都属于一个进程组。在 waitpid.函数和 kill 函数的参数中都曾使用到。
操作系统设计的进程组的概念,是为了简化对多个进程的管理。
当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。
进程组 ID=第一个进程 ID(组长进程)。

可以使用 kill -9 -进程组ID(负数) 来将整个进程组内的进程全部杀死。

二.会话

会话是多个进程组的集合
创建一个会话需要注意以下6点注意事项:

1.创建会话的进程不能是进程组组长,创建后该进程变成新会话首进程(session header)
2. 该进程成为一个新进程组的组长进程。
3. 需有 root 权限(ubuntu 不需要)
4. 新会话丢弃原有的控制终端,该会话没有控制终端
5. 该调用进程是组长进程,则出错返回,
6.建立新会话时,先调用 fork,父进程终止后,子进程调用setsid(),创建会话

获取会话id的函数:getsid()
在进程中使用,获取自己属于的会话的id
创建会话的函数:setsid()
创建一个会话,并以自己的ID设置进程组ID,同时也是新会话的ID
pid_tsetsid(void);
成功:返回调用进程的会话ID;
失败:-1
调用了 setsid 函数的进程,既是新的会长,也是新的组长。

三.守护进程

Daemon(精灵)进程,是 Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。
Linux 后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器
上文讲当一个进程创建会话后,会舍弃当前终端,到后台运行,可以作为守护进程,周期性的等待某种操作。
创建守护进程,最关键的一步是调用 setsid 函数创建一个新的 Session,并成为 Session Leader。”

守护进程创建步骤:

1.fork子进程,让父进程终止。
2.子进程调用 setsid()创建新会话
3.通常根据需要,改变工作目录位置 chdir(“path”)—这是因为进程运行在后台,需要将进程工作目录迁移到一个不可被移除的目录下,防止出错。
4.通常根据需要,重设umask文件权限掩码
5.通常根据需要,关闭或者重定向 文件描述符—因为无需交互
6.守护进程业务逻辑。while(…)

创建守护进程案例
[Linux系统编程]进程组和会话,守护进程_第1张图片

你可能感兴趣的:(linux,运维,服务器)