当前位置: 首页 > wzjs >正文

有哪些能做专门接做标书的网站苏州做网站推广的公司

有哪些能做专门接做标书的网站,苏州做网站推广的公司,免费注册网站平台,成都seo学徒深入理解 Linux 进程管理:进程组、会话、守护进程与关键系统调用 Linux 是一个以进程为中心的操作系统,而进程的管理是操作系统设计中的核心部分。在 Linux 中,进程并非孤立存在,它们被组织成进程组、会话等层次结构,…

深入理解 Linux 进程管理:进程组、会话、守护进程与关键系统调用

Linux 是一个以进程为中心的操作系统,而进程的管理是操作系统设计中的核心部分。在 Linux 中,进程并非孤立存在,它们被组织成进程组、会话等层次结构,这使得操作系统能够高效地进行管理。对于开发者而言,掌握这些概念及相关的系统调用至关重要,尤其是在编写需要后台运行的进程、守护进程以及多进程通信时。

本文将深入探讨 Linux 中的进程组、会话、控制终端、守护进程等概念,并介绍相关的关键系统调用(如 setsidgetsidchdir)及其使用场景。

1. 进程组(Process Group)

什么是进程组?

在 Linux 中,进程组是由一个父进程及其所有子进程组成的集合。每个进程组有一个唯一的进程组 ID(PGID),它通常与进程组长(组长进程,即父进程)的进程 ID(PID)相同。进程组为一组相关的进程提供了一个统一的管理单元。

进程组的作用

  • 信号发送:进程组允许对一组相关进程统一发送信号。例如,使用 killpg 可以向整个进程组的所有进程发送信号,而不仅仅是单个进程。
  • 进程管理:进程组是 Linux 进程管理中的重要部分,能够帮助系统在特定场景下更有效地控制和组织进程。

示例:发送信号到进程组

#include <unistd.h>
#include <signal.h>int main() {pid_t pgid = getpgrp();  // 获取当前进程所在的进程组killpg(pgid, SIGTERM);    // 向进程组发送 SIGTERM 信号return 0;
}

2. 会话(Session)

什么是会话?

会话是多个进程组的集合,通常由一个用户登录后启动的所有进程组成。每个会话有一个唯一的会话 ID(SID),通常与会话首进程(例如,登录进程)的 PID 相同。会话的作用是方便管理和组织用户在登录期间启动的所有进程。

会话与进程组的关系

  • 一个会话内可能包含多个进程组,但只有一个进程组是前台进程组
  • 前台进程组是与控制终端交互的进程组,它接收来自终端的输入和信号。
  • 会话通常与控制终端关联,用户通过终端与会话中的进程进行交互。

会话管理的典型场景

  • 用户登录时,系统会为该用户创建一个新的会话。
  • 当用户注销时,系统会终止会话中的所有进程。

3. 控制终端(Controlling Terminal)

什么是控制终端?

控制终端是与会话关联的终端设备,用于输入输出。会话中的进程组可以通过控制终端与用户交互。

前台进程组与后台进程组

  • 前台进程组:与控制终端交互的进程组,接收用户输入、输出以及信号。
  • 后台进程组:不直接与控制终端交互的进程组。后台进程一般不受终端输入的影响。

重要性

控制终端使得前台进程组能够与用户进行交互。比如,用户在终端输入命令时,实际上是与前台进程组中的进程进行交互。


4. 守护进程(Daemon Process)

守护进程概述

守护进程是指在后台运行的进程,通常不与用户直接交互。它们负责处理系统服务,如网络服务、日志记录、定时任务等。守护进程独立于用户登录状态运行,通常在系统启动时启动。

守护进程的特点

  • 无控制终端:守护进程通常不依赖于任何终端,能够在后台运行。
  • 父进程为 init:守护进程通常由 init 进程(PID=1)接管。
  • 长生命周期:守护进程在系统启动时开始运行,直到系统关闭时才终止。

守护进程的创建步骤

  1. 调用 fork():创建子进程,父进程退出。子进程不再与父进程保持任何关系。
  2. 调用 setsid():创建新会话并脱离控制终端,成为新会话的首进程和新进程组的组长。
  3. 更改工作目录:通常会将工作目录切换到根目录 /,防止守护进程阻止文件系统卸载。
  4. 重设文件权限掩码:通过 umask(0) 确保文件具有适当的权限。
  5. 关闭不必要的文件描述符:关闭标准输入、标准输出和标准错误输出,避免无关输出干扰。

创建守护进程示例

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>int main() {pid_t pid = fork();if (pid < 0) {// 创建进程失败return 1;} else if (pid > 0) {// 父进程退出,确保子进程成为孤儿进程return 0;}// 子进程成为守护进程if (setsid() < 0) {return 1;}chdir("/");  // 改变工作目录umask(0);    // 重设文件权限// 关闭不必要的文件描述符close(0); // 标准输入close(1); // 标准输出close(2); // 标准错误// 守护进程的主要工作代码...return 0;
}

5. setsid 系统调用

setsid 函数原型

#include <unistd.h>pid_t setsid(void);

setsid 的作用

  • 创建新会话:调用 setsid() 后,调用进程成为新会话的首进程。
  • 创建新进程组:调用进程成为新进程组的组长。
  • 脱离控制终端:调用进程脱离当前的控制终端,通常用于守护进程的创建。

使用场景

  • 守护进程创建:通常在创建守护进程时,需要调用 setsid() 使其脱离控制终端。
  • 后台运行:当需要进程在后台运行时,使用 setsid() 可以使进程脱离用户控制终端的影响。

6. getsid 系统调用

getsid 函数原型

#include <unistd.h>pid_t getsid(pid_t pid);

getsid 的作用

  • getsid() 用于获取指定进程的会话 ID。通过此调用,可以查询进程所属的会话。
  • 如果传入 pid0,则返回当前进程的会话 ID。

示例

#include <stdio.h>
#include <unistd.h>int main() {pid_t sid = getsid(0);  // 获取当前进程的会话 IDprintf("Current session ID: %d\n", sid);return 0;
}

7. chdir 系统调用

chdir 函数原型

#include <unistd.h>int chdir(const char *path);

chdir 的作用

chdir 用于更改当前工作目录。通常在创建守护进程时,会将工作目录切换到根目录,防止影响文件系统的卸载。

示例

#include <unistd.h>
#include <stdio.h>int main() {if (chdir("/") == 0) {printf("Successfully changed directory to root\n");} else {perror("chdir failed");}return 0;
}


文章转载自:

http://Inbujm1h.cprmp.cn
http://RjOqtfrZ.cprmp.cn
http://pcwC2nm1.cprmp.cn
http://e6AdkZQn.cprmp.cn
http://iwXNhVDo.cprmp.cn
http://CbhPwHnQ.cprmp.cn
http://sb2KOQMI.cprmp.cn
http://j5A8RGjb.cprmp.cn
http://5D5PXSWv.cprmp.cn
http://MbQLjcHm.cprmp.cn
http://yHS3pqSR.cprmp.cn
http://ycLx6Wyd.cprmp.cn
http://fsldGa3g.cprmp.cn
http://lRSwmFsc.cprmp.cn
http://rSXAgVnX.cprmp.cn
http://ZoT96uyZ.cprmp.cn
http://9Tna02MP.cprmp.cn
http://FO6nDAV6.cprmp.cn
http://b47ZzT2g.cprmp.cn
http://aULOkks9.cprmp.cn
http://ALgfyT9v.cprmp.cn
http://8w70Kpb0.cprmp.cn
http://9CBVVeaG.cprmp.cn
http://RU3F1OHU.cprmp.cn
http://uiAmSERe.cprmp.cn
http://ox1DGjvu.cprmp.cn
http://BfZ0srVN.cprmp.cn
http://OzLD9VQK.cprmp.cn
http://kAtS1kv6.cprmp.cn
http://KGbVYLep.cprmp.cn
http://www.dtcms.com/wzjs/745472.html

相关文章:

  • 建站最好的公司排名上海网站建设专业公司
  • 青岛企业网站开发小程序制作教程零基础入门
  • 泗洪网站建设公司如何发布自己的广告
  • 刘洋网站建设 够完美软文大全500篇
  • 西安招商型网站建设阿里巴巴logo
  • 什么网站做禽苗的多帝国cms关闭网站
  • 金华网站建设最好的cms开源
  • seo关键词优化提高网站排名wordpress在apache2.4
  • 展示型网站 asp.net构建中小型企业网络
  • 青岛网站制作百家号wordpress打赏分享
  • 网站编程 mysql印花图案设计网站
  • 网站打开速度慢优化网站编程基础
  • 沈阳市城市建设网站wordpress后台满
  • 如何做公司网站ui设计培训多长时间能学会
  • python网站开发用什么软件制作企业网页的公司
  • 高端定制网站公司哪家好公众号推送怎么制作
  • 天津网站开发公司重庆手机网站建设公司
  • 深圳市工商注册信息查询网站海外营销网络
  • 银川网站建设效果建行网上银行登录入口官网
  • 衡水做网站优化ui设计培训哪里好
  • 教育培训的网站建设做网站填素材
  • 做棋牌网站违法嘛wordpress修改注册人数
  • 推广网站的文案网站建立失败的原因是
  • 长春 行业网站绵阳市住房和城乡建设局网站
  • 做网站的客户哪里找网上国网推广多少钱一个户
  • 会计网站建设手机优化好还是不优化好
  • 网站集约化建设实施方案阿里巴巴开店网站怎么做
  • 龙岩一中网站网页设计与制作建立站点实践报告
  • 做运营的网站望野八年级
  • 镇江网络违法网站深圳保障性住房查询