守护进程

本文详细介绍了Linux中的守护进程,包括其定义、特点以及如何创建。守护进程是后台服务进程,独立于控制终端,常用于提供系统服务。文章还提供了创建守护进程的步骤及示例代码。

在linux或者unix操作系统中在系统的引导的时候会开启很多服务,这些服务就叫做守护进程。为了增加灵活性,root可以选择系统开启的模式,这些模式叫做运行级别,每一种运行级别以一定的方式配置系统。 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。

编辑本段守护进程简介

  守护进程,也就是通常说的Daemon进程,是 Linux 中的 后台 服务进程。它是一个生存期较长的进程,通常独立于控制 终端 并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、打印进程lqd等(这里的结尾字母d就是Daemon的意思)。
  由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。

编辑本段创建守护进程

创建子进程,父进程退出

  这是编写守护进程的第一步。由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象。之后的所有工作都在子进程中完成,而用户在Shell 终端 里则可以执行其他命令,从而在形式上做到了与控制终端的脱离。
  在Linux中 父进程 先于子进程退出会造成子进程成为孤儿进程,而每当系统发现一个孤儿进程时,就会自动由1号进程(init)收养它,这样,原先的子进程就会变成 init进程 的子进程。

在子进程中创建新会话

  这个步骤是创建守护进程中最重要的一步,虽然它的实现非常简单,但它的意义却非常重大。在这里使用的是 系统函数 setsid,在具体介绍setsid之前,首先要了解两个概念:进程组和会话期
   进程组 :是一个或多个进程的集合。进程组有进程组ID来唯一标识。除了进程号(PID)之外,进程组ID也是一个进程的必备属性。每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID。且该进程组ID不会因组长进程的退出而受到影响。
   会话周期 :会话期是一个或多个进程组的集合。通常,一个会话开始于用户登录,终止于用户退出,在此期间该用户运行的所有进程都属于这个会话期。
  接下来就可以具体介绍setsid的相关内容:
  (1)setsid函数作用:
  setsid函数用于创建一个新的会话,并担任该会话组的组长。调用setsid有下面的3个作用:
  让进程摆脱原会话的控制
  让进程摆脱原进程组的控制
  让进程摆脱原控制终端的控制
  那么,在创建守护进程时为什么要调用setsid函数呢?由于创建守护进程的第一步调用了fork函数来创建子进程,再将 父进程 退出。由于在调用了fork函数时,子进程全盘拷贝了父进程的会话期、进程组、控制终端等,虽然父进程退出了,但会话期、进程组、控制终端等并没有改变,因此,这还不是真正意义上的独立开来,而setsid函数能够使进程完全独立出来,从而摆脱其他进程的控制。

改变当前目录为根目录

  这一步也是必要的步骤。使用fork创建的子进程继承了父进程的当前工作目录。由于在进程运行中,当前目录所在的文件系统(如“/mnt/usb”)是不能 卸载 的,这对以后的使用会造成诸多的麻烦(比如系统由于某种原因要进入单用户模式)。因此,通常的做法是让"/"作为守护进程的当前工作目录,这样就可以避免上述的问题,当然,如有特殊需要,也可以把当前工作目录换成其他的路径,如/tmp。改变工作目录的常见函数式chdir。

重设文件权限掩码

  文件权限掩码是指屏蔽掉文件权限中的对应位。比如,有个文件权限掩码是050,它就屏蔽了 文件组 拥有者的可读与可执行权限。由于使用fork函数新建的子进程继承了父进程的文件权限掩码,这就给该子进程使用文件带来了诸多的麻烦。因此,把文件权限掩码设置为0,可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是umask。在这里,通常的使用方法为umask(0)。

关闭文件描述符

  同文件权限码一样,用fork函数新建的子进程会从 父进程 那里继承一些已经打开了的文件。这些被打开的文件可能永远不会被守护进程读写,但它们一样消耗 系统资源 ,而且可能导致所在的文件系统无法卸下。
  在上面的第二步之后,守护进程已经与所属的控制终端失去了联系。因此从 终端 输入的字符不可能达到守护进程,守护进程中用常规方法(如printf)输出的字符也不可能在终端上显示出来。所以, 文件描述符 为0、1和2 的3个文件(常说的输入、输出和报错)已经失去了存在的价值,也应被关闭。通常按如下方式关闭文件描述符:
  ===============================
  for(i=0;i<MAXFILE;i++)
  close(i);
  ===============================

守护进程退出处理

  当用户需要外部停止守护进程运行时,往往会使用 kill命令停止该守护进程。所以,守护进程中需要
  编码来实现kill发出的signal信号处理,达到进程的正常退出。
  ===============================
  signal(SIGTERM, sigterm_handler);
  void sigterm_handler(int arg)
  {
  _running = 0;
  }
  ===============================
  这样,一个简单的守护进程就建立起来了。
  实现守护进程的完整实例(每隔10s在/tmp/dameon.log中写入一句话):
  =====================================================================
  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  #include<fcntl.h>
  #include<sys/types.h>
  #include<unistd.h>
  #include<sys/wait.h>
  #include <signal.h>
  #define MAXFILE 65535
  volatile  sig_atomic_t  _running = 1;
  int main()
  {
  pid_t pc;
  int i,fd,len;
  char *buf="this is a Dameon\n";
  len = strlen(buf);
  pc = fork(); //第一步
  if(pc<0){
  printf("error fork\n");
  exit(1);
  }
  else if(PC>0)
  exit(0);
  setsid(); //第二步
  chdir("/"); //第三步
  umask(0); //第四步
  for(i=0;i<MAXFILE;i++) //第五步
  close(i);
  signal(SIGTERM, sigterm_handler);
  while( _running ){
  if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0){
  perror("open");
  exit(1);
  }
  write(fd,buf,len);
  close(fd);
  usleep(10*1000); //10毫秒
  }
  }
  void sigterm_handler(int arg)
  {
  _running = 0;
  }

编辑本段linux守护进程列表

  amd:自动安装NFS( 网络文件系统 )守侯进程
  apmd:高级电源治理
  Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库
  Autofs:自动安装治理进程automount,与NFS相关,依靠于NIS
  Bootparamd:引导参数服务器,为LAN上的 无盘工作站 提供引导所需的相关信息
  crond:linux下的计划任务
  Dhcpd:启动一个DHCP(动态IP地址分配)服务器
  Gated: 网关 路由守候进程,使用动态的OSPF 路由选择协议
  Httpd:WEB服务器
  Inetd:支持多种 网络服务 的核心守候程序
  Innd:Usenet新闻服务器
  Linuxconf:答应使用本地WEB服务器作为 用户接口 来配置机器
  Lpd: 打印服务器
  Mars-nwe:mars-nwe文件和用于Novell的 打印服务器
  Mcserv:Midnight命令 文件服务器
  named:DNS服务器
  netfs:安装NFS、Samba和NetWare 网络文件系统
  network:激活已配置网络接口的 脚本程序
  nfs:打开NFS服务
  nscd:nscd(Name Switch Cache daemon)服务器,用于NIS的一个支持服务,它高速缓存用户口令和组成成员关系
  portmap:RPC portmap治理器,与inetd类似,它治理基于RPC服务的连接
  postgresql:一种SQL 数据库服务器
  routed:路由守候进程,使用动态RIP 路由选择协议
  rstatd:一个为LAN上的其它机器收集和提供系统信息的守候程序
  ruserd: 远程用户 定位服务,这是一个基于RPC的服务,它提供关于当前记录到LAN上一个机器日志中的用户信息
  rwalld:激活rpc.rwall服务进程,这是一项基于RPC的服务,答应用户给每个注册到LAN机器上的其他终端写消息
   rwho d:激活rwhod服务进程,它支持LAN的rwho和ruptime服务
  sendmail: 邮件服务器 sendmail
  smb:Samba文件共享/打印服务
  snmpd:本地简单网络治理候进程
  squid:激活代理服务器squid
  syslog:一个让系统引导时起动syslog和klogd 系统日志 守候进程的脚本
  xfs:X Window字型服务器,为本地和远程X服务器提供字型集
  xntpd:网络时间服务器
  ypbind:为NIS(网络信息系统)客户机激活ypbind服务进程
  yppasswdd:NIS口令服务器
  ypserv:NIS主服务器
  gpm:管鼠标的
  identd:AUTH服务,在提供用户信息方面与finger类似

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值