电脑如何做网站,邯郸网站建设安联网络公司,网站通知发送邮件,wix和wordpress区别1. 进程组#xff0c;也称之为作业。代表一个或多个进程的集合。 每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念#xff0c;是为了简化对多个进程的管理。 当父进程#xff0c;创建子进程的时候#xff0c;默认子进程…1. 进程组也称之为作业。代表一个或多个进程的集合。 每个进程都属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念是为了简化对多个进程的管理。 当父进程创建子进程的时候默认子进程与父进程属于同一进程组。进程组ID第一个进程ID(组长进程)。所以组长进程标识其进程组ID其进程ID
可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。 【kill_multprocess.c】
组长进程可以创建一个进程组创建该进程组中的进程然后终止。只要进程组中有一个进程存在进程组就存在与组长进程是否终止无关。
进程组生存期进程组创建到最后一个进程离开(终止或转移到另一个进程组)。
一个进程可以为自己或子进程设置进程组ID 2. 会话 会话是多个进程组的集合。 3. 进程进程组会话之前的关系 就像家族企业一样如果从创业之初所有家族成员都墨守成规循规蹈矩默认情况下就只会有一个公司、一个部门。但是也有些“叛逆”的子弟愿意为家族公司开疆拓土愿意成立新的部门。这些新的部门就是新创建的进程组。如果有子弟“离经叛道”甚至不愿意呆在家族公司里他别开天地另创了一个公司那这个新公司就是新创建的会话组。由此可见系统必须要有改变和设置进程组ID和会话ID的函数接口否则系统中只会存在一个会话、一个进程组。 4. 创建会话
创建一个会话需要注意以下6点注意事项
调用进程不能是进程组组长该进程变成新会话首进程(session header)
该进程成为一个新进程组的组长进程。
需有root权限 (ubuntu不需要)
新会话丢弃原有的控制终端该会话没有控制终端
该调用进程是组长进程则出错返回
建立新会话时先调用fork, 父进程终止子进程调用setsid 5.getsid函数
获取进程所属的会话ID
pid_t getsid(pid_t pid); 成功返回调用进程的会话ID失败-1设置errno
pid为0表示察看当前进程session ID
ps ajx命令查看系统中的进程。参数a表示不仅列当前用户的进程也列出所有其他用户的进程参数x表示不仅列有控制终端的进程也列出所有无控制终端的进程参数j表示列出与作业控制相关的信息。
组长进程不能成为新会话首进程新会话首进程必定会成为组长进程。 6.setsid函数
创建一个会话并以自己的ID设置进程组ID同时也是新会话的ID。
pid_t setsid(void); 成功返回调用进程的会话ID失败-1设置errno
调用了setsid函数的进程既是新的会长也是新的组长。
练习fork一个子进程并使其创建一个新会话。查看进程组ID、会话ID前后变化 7.守护进程
Daemon(精灵)进程是Linux中的后台服务进程通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。一般采用以d结尾的名字。
Linux后台的一些系统服务进程没有控制终端不能直接和用户交互。不受用户登录、注销的影响一直在运行着他们都是守护进程。如预读入缓输出机制的实现ftp服务器nfs服务器等。 创建守护进程最关键的一步是调用setsid函数创建一个新的Session并成为Session Leader。 8 创建守护进程模型
8.1 创建子进程父进程退出
所有工作在子进程中进行形式上脱离了控制终端
在子进程中创建新会话
8.2 setsid()函数
使子进程完全独立出来脱离控制
改变当前目录为根目录
8.3 chdir()函数
防止占用可卸载的文件系统
也可以换成其它路径
重设文件权限掩码
8.4 umask()函数
防止继承的文件创建屏蔽字拒绝某些权限
增加守护进程灵活性
8.5 关闭文件描述符
继承的打开文件不会用到浪费系统资源无法卸载
8.6 开始执行守护进程核心工作守护进程退出处理程序模型