首页 > 系统相关 >【c&c++】linux守护进程设置开机自启动的两种方式

【c&c++】linux守护进程设置开机自启动的两种方式

时间:2024-02-08 12:22:05浏览次数:27  
标签:EXEC stop c++ start init linux 自启动 include

linux守护进程设置开机自启动的两种方式

 

前期准备

首先,我们创建一个守护进程
1、守护进程初始化程序init.c文件如下:

#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>

void init_daemon(void)
{
pid_t child1,child2;
int i;
child1 = fork();
if(child1>0)
{
exit(0);
}
else if(child1<0)
{
perror("创建子进程失败");
exit(1);
}
setsid();
chdir("/tmp");
umask(0);
for(i=0;i<NOFILE;++i)
close(i);
return;
}

2、测试文件6-8.c内容如下:

#include<stdio.h>
#include<time.h>
void init_daemon(void);
int main()
{
FILE *fp;
time_t t;
init_daemon();
while(1)
{
sleep(10);
if((fp=fopen("6-8.log","a"))>=0)
    {

    t=time(0);
    fprintf(fp,"守护进程还在运行,时间是:%s",asctime(localtime(&t)));
    fclose(fp);    
}
}
}

实验结果如下

第一种方式

自启动程序方法1:
在etc/rc.local文件最后一行加入/home/robin/code/6-8 (其中6-8测试程序名称,一定要写绝对路径)。即可自启动

第二种方式

自启动程序方法2:
创建linux服务,步骤如下:

  写服务启动脚本文件(后附例子)

  修改脚本文件chmod 777 6-8(设置脚本文件的权限)

  脚本文件拷贝到 /etc/rc.d/init.d/

  chkconfig --add 6-8添加服务

  重新启动(完成)

6) 重新启动后在终端输入命令:ps -A -opid,stime,etime,args即可查看开机自启的守护进程。

7)查看服务是否存在
chkconfig --list | grep wkcenter
查看服务状态
chkconfig wkcenter on

注意, 确认wkcenter在2,3,4,5中任意或者部分开启, 必须为绿字. 灰字代表服务无法开机启动或者其他问题

8 )测试

临时开启命令测试
service wkcenter start

#!/bin/bash

#

# autoruntest  the shell script takes care of autoruntest auto start and stop

#

# chkconfig:   2345 20 80

# description: 6-8

# processname:     /etc/rc.d/init.d/autoruntest

 

EXEC_PATH=/home/robin/code/6-8 

EXEC=6-8

PID_FILE=/var/run/6-8.pid

DAEMON=/home/robin/code/6-8

 

# Source function library.

. /etc/rc.d/init.d/functions

 

if ! [ -x $EXEC_PATH/$EXEC ] ; then

       echo "ERROR: $EXEC_PATH/$EXEC not found"

       exit 1

fi

 

stop()

{

       echo "Stoping $EXEC ..."

       killall $DAEMON >/dev/null

       usleep 100

       echo "Shutting down $EXEC: [  OK  ]"      

}

 

start()

{

       echo "Starting $EXEC ..."

       $DAEMON > /dev/null &

       usleep 100

       echo "Starting $EXEC: [  OK  ]"         

}

 

restart()

{

       stop

       start

}

 

 

case "$1" in

       start)

       start

       ;;

       stop)

       stop

       ;;

       restart)

       restart

       ;;

       status)

       status -p $PID_FILE $DAEMON  

       ;;    

  *)

       echo "Usage: service $EXEC {start|stop|restart|status}"

       exit 1

esac

 

exit $?

 

标签:EXEC,stop,c++,start,init,linux,自启动,include
From: https://www.cnblogs.com/opensmarty/p/18011712

相关文章

  • linux基础
    flutter安装直接通过克隆官方仓库安装是最舒服的gitclone-bdevhttps://github.com/flutter/flutter.gitflatpak卸载软件flatpaklistflatpakuninstallapp_idflatpakuninstall--unused相关概念在这里有时候并不严格区分目录和文件。物理磁盘:/dev/sd--虚拟磁盘:/de......
  • Linux环境下非GUI制作图形界面方法
    Linux环境下非GUI制作图形界面方法如题,即就是仅仅使用ANSI转义字符实现Linux环境的页面效果,如字体颜色、背景颜色、高亮、固定位置光标、将光标放到指定位置、隐藏字符串等等。具体实现方法在如下代码中,使用方法在注释里可以看到。//#ifndef__PRINT_H__#define__PRINT_H__......
  • C++多线程 第四章 同步并发操作
    第四章同步并发操作等待事件设想一个情景:你正坐在一辆从哈尔滨驶向郴州的绿皮火车上,这趟车需要耗时2天2夜,合计3000公里的路程.于是在这里,我们将你和司机视作为两个线程.你的任务是在目的地下车,司机的任务是将车开到目的地.假设你和司机坐在同一个车厢内,并且你是个不说......
  • linux下进行MCU开发环境搭建
    why为什么要搭建此开发环境?在linux环境下开发可以利用shell命令实现对文件的批处理伟大的程序员应该都用类unix系统!可以实现对底层编译技术的了解,以便于更好的掌握嵌入式技术通用性,采用开源工具,从底层开发项目,可以不受制于特定厂商的ide工具.可以实现通用架构!what......
  • linux系统自动记录登陆用户的操作命令
    ViewCode#--------------------trace_login---------------------------------USER_IP=$(echo-e"`who-uami2>/dev/null|awk'{print$NF}'|sed-e's/[()]//g'`")IP=$(who-uami2>/dev/null|awk'{print$NF}'|......
  • Linux Cgroups blkio Subsystem
    前言本文主要会介绍笔者在学习LinuxCgroupsblkioSubsystem时所总结的知识点,其中会涉及到使用方式以及配置方式等方面的相关内容。笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳大家的建议,对于我来说也......
  • Linux Control Group
    LinuxCGroup全称LinuxControlGroup,是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起(主要是PaulMenage和RohitSeth),最早的名称为进程容器(processcontainers)。在2007年时,因为在Linux内......
  • Linux Namespace
    LinuxNamespace是Linux内核提供的一种机制,用于实现进程之间的隔离。通过使用Namespace,可以将一组进程和资源限制在一个隔离的环境中,使它们看起来像在独立的系统上运行一样。PIDNamespace(进程隔离):PIDNamespace为进程提供了独立的进程ID空间,使得每个Namespace内的进程......
  • C++中的static关键字和this指针
    C++中的static关键字用来修饰静态成员变量和静态成员函数,static定义的类的静态成员(成员变量和成员函数),它会有一块单独的存储区。当我们把这个类实例化时,会为类实例化的对象来分配空间,显然此时给对象分配的内存空间不包括静态成员所占的空间。特别要注意,静态成员变量必须在类......
  • Linux常用命令全解析
    Linux是一个强大的操作系统,广泛应用于服务器、云计算、网络设备等领域。熟练使用Linux命令行是每一个IT专业人士必备的技能。本文旨在为大家提供一个Linux常用命令的快速参考指南,包括命令的基本用法、示例以及简短解释,帮助大家提高在Linux环境下的工作效率。文件和目录操作ls-列......