linux下如何创建守护进程的步骤

这两天学习了linux 守护进程这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

1,进程的概念:程序的一次动态执行过程。 

进程存在于内存当中,存在着  创建,调度,执行和消亡,进程号是进程的唯一标志,每一个进程都有自己独立的内存空间,在32位操作系统中,进程拥有0-4G的内存空间,其中0-3G属于用户,3G-4G属于内核,所以就出现了进程的执行模式:用户模式和内核模式。

2,进程的类型:交互进程,批处理进程,守护进程

3,守护进程:Linux中的后台服务进程,daemon进程

4,守护进程的创建步骤: 

(1)创建子进程,父进程退出。

经过这步以后,子进程就会成为孤儿进程(父进程先于子进程退出, 此时的子进程,成为孤儿进程,会被init进程收养)。使用fork()函数,如果返回值大于0,表示为父进程,exit(0),父进程退出,子进程继续。

(2)在子进程中创建新会话,使当前进程成为新会话组的组长。

使用setsid()函数,如果当前进程不是进程组的组长,则为当前进程创建一个新的会话期,使当前进程成为这个会话组的首进程,成为这个进程组的组长。

(3)改变当前目录为根目录。

由于守护进程在后台运行,开始于系统开启,终止于系统关闭,所以要将其目录改为系统的根目录下。进程在执行时,其文件系统不能被卸下。

(4)重新设置文件权限掩码。

进程从父进程那里继承了文件创建掩码,所以可能会修改守护进程存取权限位,所以要将文件创建掩码清除,umask(0);

(5)关闭文件描述符。

子进程从父进程那里继承了打开文件描述符。所以使用close即可关闭。

在这里要用到getdtablesize()函数得到这个进程打开文件的数目。

按照上面的步骤即可完成守护进程的创建。

具体的代码如下,守护进程的功能写的较为简单,往文件里写东西:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>

int main()
{   // 1创建子进程 ,父进程退出
  pid_t pid = fork();
  if(pid<0)
  {
   perror("fork error");
   return -1;
  }
  else if(pid>0)
  {
   exit(0);
  }
  else
  {
    while(1)
    {
      //2 组长
      setsid();
      // 改变路径至根目录
      chdir("/tmp");
      //重设文件掩码
      umask(0);
      //关闭文件描述符
      int des=getdtablesize();
      int i=0;
      for(i=0;i<des;i++)
      {
        close(i);
      }
    }
    char buf[]="bat xld come!\n";
    int fd=open("xld.txt",O_WRONLY|O_CREAT |O_APPEND,0666);
     write(fd,buf,sizeof(buf));
     sleep(2);
    }
  return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux守护进程的启动方法

    "守护进程"(daemon)就是一直在后台运行的进程(daemon). 一.问题的由来 Web应用写好后,下一件事就是启动,让它一直在后台运行. 这并不容易.举例来说,下面是一个最简单的Node应用server.js,只有6行. var http = require('http'); http.createServer(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('He

  • linux 创建守护进程的相关知识

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

  • linux 守护进程详解及建立守护进程

    linux 守护进程详解及建立守护进程 守护进程是一种后台运行并且独立于所有终端控制之外的进程. 守护进程的启动 要启动一个守护进程,可以采取一下几种方式: 在系统期间通过系统的初始化脚本启动守护进程.这些脚本通常在目录etc/rc.d下,通过它们所启动的守护进程具有超级用户的权限.系统的一些基本服务通常都是通过这种方式启动的. 很多网络服务程序都是由inetd守护程序启动的.它监听各种网络请求,如telnet.ftp等,在请求到达时启动相应的服务器程序(telnet server,ftp se

  • linux下的守护进程

    Linux下的常驻进程的作用不可忽略,但这里面的问题也不能忽略,怎么启动进程,怎么结束进程,怎么在进程挂掉之后重启进程都要设计的合理.下面看一个shell控制的php常驻进程的例子. 不废话,直接捞干货,上代码,通过代码来讲解更容易理解: 复制代码 代码如下: #!/bin/sh #filename test.sh #绝对定位该文件的位置,不随执行目录而变化 cd $(cd "$(dirname "$0")";pwd) readonly path=$(pwd)/ f

  • 详解Linux中的守护进程

    一.什么是守护进程 Linux系统启动时会启动很多系统服务进程,这些系统服 务进程没有控制终端,不能直接和用户交互.其它进程都是在用户登录或运行程序时创建,在运⾏结束或⽤户注销时终止,但系统服务进程不受用户登录注销的影响,它们⼀直在运行着.这种进程叫守护进程. 守护进程也被称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件. 查看方式 ps axj命令:查看系统中的进程. 参数a表示不仅列当前⽤户的进程,也列出所有其他用户的进程: 参数x表

  • linux下如何创建守护进程的步骤

    这两天学习了linux 守护进程这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记. 1,进程的概念:程序的一次动态执行过程.  进程存在于内存当中,存在着  创建,调度,执行和消亡,进程号是进程的唯一标志,每一个进程都有自己独立的内存空间,在32位操作系统中,进程拥有0-4G的内存空间,其中0-3G属于用户,3G-4G属于内核,所以就出现了进程的执行模式:用户模式和内核模式. 2,进程的类型:交互进程,批处理进程,守护进程 3,守护进程:Linux中的后台服务进程,daemon进程 4

  • ASP.NET Core在Linux下为dotnet创建守护进程

    什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭.但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会

  • Python 创建守护进程的示例

    考虑如下场景:你编写了一个python服务程序,并且在命令行下启动,而你的命令行会话又被终端所控制,python服务成了终端程序的一个子进程.因此如果你关闭了终端,这个命令行程序也会随之关闭. 要使你的python服务不受终端影响而常驻系统,就需要将它变成守护进程. 守护进程就是Daemon程序,是一种在系统后台执行的程序,它独立于控制终端并且执行一些周期任务或触发事件,通常被命名为"d"字母结尾,如常见的httpd.syslogd.systemd和dockerd等. 代码实现 pyt

  • linux下mysql创建新的用户的方法

    1.以root身份登录到MySQL服务器中. $ mysql -u root -p 当验证提示出现的时候,输入MySQL的root帐号的密码. 2.创建一个MySQL用户 使用如下命令创建一个用户名和密码分 为"username"和"userpassword"的用户. mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'userpassword'; 一旦用户被创建后,包括加密的密码.权限和资源限制在

  • linux下使用Apache搭建文件服务器的步骤

    一.关于文件服务器 在一个项目中,如果想把公共软件或者资料共享给项目组成员,可以搭建一个简易的文件服务器来实现,只要是在局域网内的成员都可以通过浏览器或者wget命令来下载和访问资料.可以达到信息共享,软件版本一致的效果.本文讲述在linux环境下使用Apache服务搭建文件服务器. 二.使用Apache搭建文件服务器 1.Apache服务在linux环境下的程序叫做httpd,所以首先安装httpd服务,如果配置好了yum源的话,直接使用yum命令安 装,如果没有配置好yum源的话,可以参考博

  • Linux下安装Hadoop集群详细步骤

    目录 1.在usr目录下创建Hadoop目录,将安装包导入目录中并解压文件 2.进入vim /etc/profile文件并编辑配置文件 3.使文件生效 4.进入Hadoop目录下 5.编辑配置文件 6.进入slaves添加主节点和从节点 7.将各个文件复制到其他虚拟机上 8.格式化hadoop (仅在主节点中进行操作) 9.回到Hadoop目录下(仅在主节点操作) 1.在usr目录下创建Hadoop目录,将安装包导入目录中并解压文件   2.进入vim /etc/profile文件并编辑配置文件

  • Linux下C语言修改进程名称的方法

    本文实例讲述了Linux下C语言修改进程名称的方法.分享给大家供大家参考.具体如下: #include <stdio.h> #include <string.h> #include "./util/setproctitle.c" // extern char **environ; // int main(int argc , char *argv[]) // { // int i; // printf("argc:%d\n" , argc);

  • Linux下部署springboot项目的方法步骤

    最近在研究将springboot项目部署到Linux服务器上,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上. 1.在pom文件中添加springboot的maven插件 <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> spring-boot-maven-plugin</artifactid> </p

  • LInux下安装MySQL5.6 X64版本步骤详解

    环境: 1.CentOS6.5 X64 2.mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz 3.下载地址:http://dev.mysql.com/downloads/mysql/ 安装步骤 1.再安装包的存放目录下执行命令解压文件 tar -zxvf mysql-5.6.34-linux-glibc2.5-x86_64.tar.gz -C /opt/ 2.删除安装包,重命名解压后的文件 rm -rf mysql-5.6.34-linux-glibc2.5-x

随机推荐