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

宁波网络建站模板平面设计资料网站

宁波网络建站模板,平面设计资料网站,瑞金建设局网站,金坛网站开发守护进程概念#xff1a;守护进程#xff0c;也就是通常所说的Daemon进程#xff0c;是Linux中的后台服务进程。周期性的执行某种任务或等待处理某些发生的事件。Linux系统有很多守护进程#xff0c;大多数服务都是用守护进程实现的。比如#xff1a;像我们的tftp#xf… 守护进程概念守护进程也就是通常所说的Daemon进程是Linux中的后台服务进程。周期性的执行某种任务或等待处理某些发生的事件。Linux系统有很多守护进程大多数服务都是用守护进程实现的。比如像我们的tftpsambanfs等相关服务。UNIX的守护进程一般都命名为*d的形式如httpdtelnetd等等。生命周期:守护进程会长时间运行常常在系统启动时就开始运行直到系统关闭时才终止。守护进程不依赖于终端从终端开始运行的进程都会依附于这个终端这个终端称为这些进程的控制终端。当控制终端被关闭时相应的进程都会被自动关闭。咱们平常写进程时一个死循环程序咱们不知道有ctrlc的时候怎么关闭它呀是不是关闭终端呀。也就是说关闭终端的同时也关闭了我们的程序但是对于守护进程来说其生命周期守护需要突破这种限制它从开始运行直到整个系统关闭才会退出所以守护进程不能依赖于终端。查看守护进程ps axja: 显示所有 x显示没有控制终端的进程 j显示与作业有关的信息显示的列会话期IDSID进程组IDPGID控制终端TT终端进程组IDTRGID• 所有的守护进程都是以超级用户启动的(UID为0)• 没有控制终端(TTY为)• 终端进程组ID为-1(TPGID表示终端进程组ID该值表示与控制终端相关的前台进程组如果未和任何终端相关其值为-1• 所有的守护进程的父进程历史上Linux 的启动一直采用init进程下面的命令用来启动服务。这种方法有两个缺点 1. 启动时间长。init进程是串行启动只有前一个进程启动完才会启动下一个进程。 2. 启动脚本复杂。init进程只是执行启动脚本不管其他事情。脚本需要自己处理各种情况 这往往使得脚本变得很长。 Systemd 就是为了解决这些问题而诞生的。它的设计目标是为系统的启动和管理提供一套完整的解决方案。根据 Linux 惯例字母d是守护进程daemon的缩写。Systemd 这个名字的含义就是它要守护整个系统。进程组、会话、控制终端• 进程组shell里的每个进程都属于一个进程组创建进程组的目的是用于简化向组内所有进程发送信号的操作即如果一个信号是发给一个进程组则这个组内的所有进程都会受到该信号【方便管理】。• PGID进程组ID进程组内的所有进程都有相同的PGID等于该组组长的PID。进程组组长进程组中有一个进程担当组长。进程组IDPGID等于进程组组长的进程ID。已知一个进程要得到该进程所属的进程组ID可以调用getpgrp。一个进程可以通过另一个系统调用setpgrp来加入一个已经存在的进程组或者创建一个新的进程组。如果内核支持_POSIX_JOB_CONTROL该宏被定义则内核会为Shell 上的每一条命令行可能由多个命令通过管道等连接创建一个进程组。从这点上看进程组不是进程的概念而是shell上才有所以在task_struct里并没有存储进程组id之类的变量。进程组的生命周期到组中最后一个进程终止或其加入其他进程组离开本进程组为止。会话一般一个用户登录后新建一个会话每个会话也有一个ID来标识SID。登录后的第一个进程叫做会话领头进程session leader通常是一个shell/bash。对于会话领头进程其PIDSID。控制终端一个会话一般会拥有一个控制终端用于执行IO操作。会话的领头进程打开一个终端之后, 该终端就成为该会话的控制终端。与控制终端建立连接的会话领头进程也称为控制进程 (controlling process) 。一个会话只能有一个控制终端。前台进程组该进程组中的进程能够向终端设备进行读、写操作的进程组。例如登陆shell例如bash通过调用int tcsetpgrp(int fd, pid_t pgrp); 函数设置为某个进程组pgrp关联终端设备fd该函数执行成功后该进程组pgrp成为前台进程组。后台进程组该进程组中的进程只能够向终端设备写。终端进程组ID每个进程还有一个属性终端进程组ID(TPGID)用来标识一个进程是否处于一个和终端相关的进程组中。前台进程组中的进程的TPGIDPGID后台进程组的PGID≠TPGID。若该进程和任何终端无关其值为-1。通过比较他们来判断一个进程是属于前台进程组还是后台进程组。进程组、对话期和控制终端关系进程组、对话期和控制终端关系每个会话有且只有一个前台进程组但会有0个或者多个后台进程组。产生在控制终端上的输入Input和信号Signal将发送给会话的前台进程组中的所有进程。对于输出Output来说则是在前台和后台共享的即前台和后台的打印输出都会显示在屏幕上。终端上的连接断开时 (比如网络断开或 Modem 断开), 挂起信号将发送到控制进程(controlling process) 。一个用户登录后创建一个会话。一个会话中只存在一个前台进程组但可以存在多个后台进程组。第一次登陆后第一个创建的进程是shell也就是会话的领头进程该领头进程缺省处于一个前台进程组中并打开一个控制终端可以进行数据的读写。当在shell里运行一行命令后不带创建一个新的进程组命令行中如果有多个命令会创建多个进程这些进程都处于该新建进程组中shell将该新建的进程组设置为前台进程组并将自己暂时设置为后台进程组。举例打开第一个终端执行命令ping 127.0.0.1 -aq | grep icmp   // 通过管道将两个命令串接起来ping –q不显示timeout信息将其设置到后台并running 在第一个终端继续执行命令在前台再新建一个进程组。【注意没有】ping 127.0.0.1 -aq | grep icmp //在前台再新建一个进程组 开启第二个终端并运行 ps axj | grep pts/0      即过滤只看pts/0里的会话PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND2109  2111  2111  2111 pts/0     2538 Ss    1000   0:01 bash2111  2503  2503  2111 pts/0     2538 S     1000   0:00 ping 127.0.0.1 -aq2111  2504  2503  2111 pts/0     2538 S     1000   0:00 grep --colorauto icmp2111  2538  2538  2111 pts/0     2538 S    1000   0:00 ping 127.0.0.2 -aq2111  2539  2538  2111 pts/0     2538 S    1000   0:00 grep --colorauto timeo • SID都是2111说明大家都在一个Session里 • 有三个进程组PGID 21112503和2538。我们可以看到用|连起来的ping和grep是在一个进程组里的。• 2538这个进程组是一个前台的进程组因为其PGIDTGPID 2503这个进程组是一个后台进程组在第一个终端中执行CtrlC在第二个终端里继续ps axj | grep pts/0 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND2109  2111  2111  2111 pts/0     2111 Ss   1000   0:01 bash2111  2503  2503  2111 pts/0     2111 S     1000   0:00 ping 127.0.0.1 -aq2111  2504  2503  2111 pts/0     2111 S     1000   0:00 grep --colorauto icmp • 2538那个前台进程组的所有进程都消失了说明信号会发给前台进程组的所有进程 • 2111即bash所在的那个进程组成为了前台进程组。守护进程创建流程守护进程创建流程如下1. 创建子进程父进程退出  2. 在子进程中创建新会话  3. 改变当前目录为根目录  4. 重设文件权限掩码  5. 关闭文件描述符  1.创建子进程父进程退出由于守护进程是脱离控制终端的因此完成第一步后就会在shell终端里造成一程序已经运行完毕的假象。之后的所有后续工作都在子进程中完成而用户在shell终端里则可以执行其他的命令从而在形式上做到了与控制终端的脱离。由于父进程已经先于子进程退出会造成子进程没有父进程从而变成一个孤儿进程。在Linux中每当系统发现一个孤儿进程就会自动由1号进程收养。原先的子进程就会变成init进程的子进程。2. 在子进程中创建新会话setsid()函数的作用。一个进程调用setsid()函数后会发生如下事件• 首先内核会创建一个新的会话并让该进程成为该会话的leader进程 • 同时伴随该session的建立一个新的进程组也会被创建同时该进程成为该进程组的组长。 • 该进程此时还没有和任何控制终端关联。若需要则要另外调用tcsetpgrp前面讲前台进程组时介绍过。 调用setsid()有以下3个作用• 让进程摆脱原会话的控制。 • 让进程摆脱原进程组的控制。 • 让进程摆脱原控制终端的控制。 那么在创建守护进程时为什么要调用setsid()函数呢读者可以回忆一下创建守护进程的第一步在那里调用了fork()函数来创建子进程再令父进程退出。由于在调用fork()函数时子进程全盘复制了父进程的会话期、进程组和控制终端等虽然父进程退出了但原先的会话期、进程组和控制终端等并没有改变因此还不是真正意义上的独立。而setsid()函数能够使进程完全独立出来从而脱离所有其他进程和终端的控制。详细见man 2 setsid。3.改变当前目录为根目这一步也是必要的步骤。使用fork()创建的子进程继承了父进程的当前工作目录。由于在进程运行过程中当前目录所在的文件系统如“/mnt/usb”等是不能卸载的这对以后的使用会造成诸多的麻烦如系统由于某种原因要进入单用户模式。因此通常的做法是让“/”作为守护进程的当前工作目录这样就可以避免上述问题。当然如有特殊需要也可以把当前工作目录换成其他的路径如/tmp。改变工作目录的常见函数是chdir()。4. 重设文件权限掩码文件权限掩码是指屏蔽掉文件权限中的对应位。例如有一个文件权限掩码是050它就屏蔽了文件组拥有者的可读与可执行权限。由于使用fork()函数新建的子进程继承了父进程的文件权限掩码这就给该子进程使用文件带来了诸多的麻烦。因此把文件权限掩码设置为0可以大大增强该守护进程的灵活性。设置文件权限掩码的函数是umask()。在这里通常的使用方法为umask(0)。即赋予最大的能力。5. 关闭文件描述符同文件权限掩码一样用fork()函数新建的子进程会从父进程那里继承一些已经打开的文件。这些被打开的文件可能永远不会被守护进程读或写但它们一样消耗系统资源而且可能导致所在的文件系统无法被卸载。在上面的第2步之后守护进程已经与所属的控制终端失去了联系因此从终端输入的字符不可能达到守护进程守护进程中用常规方法如printf()输出的字符也不可能在终端上显示出来。所以文件描述符为0、1和2的3个文件常说的输入、输出和报错这3个文件已经失去了存在的价值也应被关闭。代码实现/*关注一口Linux */ #include unistd.h  #include sys/types.h  #include sys/stat.h  #include stdlib.h #include stdio.h #include sys/stat.h  #include fcntl.h #include string.hint main() {pid_t pid;int i, fd;char *buf  This is a Daemon\n;pid  fork();if (pid  0) {printf(Error fork\n);exit(1);} /* 第一步,父进程退出 */if (pid  0) {exit(0); }/* 第二步 */setsid();/* 第三步 */  chdir(/);  /* 第四步 */umask(0);/* 第五步 */  for(i  0; i  getdtablesize(); i) {close(i);}/* 这时创建完守护进程以下开始正式进入守护进程实际工作* 注意由于此时守护进程完全脱离了控制终端因此不能像其他普通进程* 一样通过printf或者perror将错误信息输出到控制终端一种通用的办* 法是使用syslog服务将程序中的出错信息输入到系统日志文件中。* 本程序着重演示创建守护进程的步骤暂不演示syslog。*/while(1) {if ((fd  open(/tmp/daemon.log, O_CREAT|O_WRONLY|O_APPEND, 0600))  0) {exit(1);}write(fd, buf, strlen(buf)  1);close(fd);sleep(10);}exit(0); } 执行结果由上图可见• 守护进程./run 的UID为0• 没有控制终端(TTY为)• 终端进程组ID为-1• 守护进程的父进程为1516即systemd。 #推荐阅读    专辑|Linux文章汇总    专辑|程序人生    专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号
http://www.zqtcl.cn/news/160090/

相关文章:

  • php网站忘记后台密码江苏网页制作报价
  • 网站模板 哪个好完备的常州网站推广
  • 衡水淘宝的网站建设濮阳市城乡一体化示范区主任
  • 公司网上注册在哪个网站商洛市商南县城乡建设局网站
  • 怎么才能让网站图文展示大连网站建设设计
  • 俱乐部网站 模板seo产品是什么意思
  • 新手学做网站的教学书建造师查询官网
  • win2012 iis添加网站群辉做网站服务器
  • 网站优化课程培训山东网站备案公司
  • top wang域名做网站好事业单位门户网站建设评价
  • 有什么网站可以做简历网站备案表格
  • 网站开发用什么图片格式最好厦门人才网个人会员
  • 关于网站开发的文献深圳网络推广代运营
  • 网站做app的重要性做静态网站有什么用
  • 一键搭建网站系统教做衣服的网站有哪些
  • 城乡建设部网站施工员证书查询中铁建设集团有限公司招标平台
  • 广东省建设项目安全标准自评网站哪个网站可以免费做简历
  • 带产品展示的个人网站模板购物网站开发背景
  • 哪个域名注册网站好seo广告投放是什么意思
  • 网站建设ydwzjs电子邮箱怎么申请
  • 福建省建住房建设部网站wordpress 算数验证码
  • 东莞企业如何建网站网站正在建设中...为什么护卫神
  • 引流用的电影网站怎么做wordpress浏览速度
  • 微信小程序怎拼做搬家网站东莞建网站公司
  • 网站推广昔年下拉博客推广链接制作软件
  • php 小企业网站 cmswordpress导航分类
  • 婚恋网站女孩子都是做美容免费空间最大的网盘
  • 建立网站要钱吗找人做网站需求怎么写
  • 网站建设精品课程电商运营主要负责什么
  • 中职网站建设与维护考试题wordpress商店会员管理