ubuntu下编写开机自启守护进程,并记录进程信息到日志文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

步骤1:编写守护进程

void init(){
 pid_t pid;
 int i;
 pid=fork();        //创建第一子进程
 if(pid<0) exit(1);//创建失败退出
 if(pid>0) exit(0);//父进程退出
 setsid();         //第一子进程成为领头进程,脱离终端
 pid=fork();   //第一子进程生成第二子进程
 if(pid<0) exit(1);//创建失败退出
 if(pid>0) exit(0);//第一子进程退出
 chdir("/home/ling/文档");//切换目录
 umask(0);               //改变文件创建掩码
 for(i=0;i<NOFILE;i++)  //关闭文件流
  close(i);  
}

注意这里chdir函数中的路径就是日志文件的保存路径。

步骤2:记录进程信息到日志文件

void main(){
char buf[256];
FILE *fp,*p;
init();
while(1){
    sleep(30);                                           //每30s记录一次
    if((fp=fopen(“test.log”,“a”))>=0){                   //打开文件test.log,参数a表示以追加的形式打开
        p=popen(“ps-eopid,user,cmd,start_time,etime”,“r”);//将指针p连接到ps命令的标准输出
        while(fgets(buf,sizeof(buf),p)!=0)                 //获取输出内容并保存在buf中
            fprintf(fp,“%s\n”,buf);                        //以字符串的形式将buf中的内容写到fp指定的文件中
        pclose(p);
    }
    fclose(fp);
    }
}

步骤3:编译运行,设置开机启动

编译程序

命令行下执行:

gccprotect.c –o protect

到可执行文件protect,再执行:

./protect

可运行程序

机启动

安装sysv-rc-conf

sudo apt-get installsysv-rc-conf

执行:

sudosysv-rc-conf 这里是你的程序名称 on

到这里就可以的,但重启之后你在终端会找不到这个程序的信息,但它其实在后台运行。

设置开机启动的另一种方法就是直接把启动命令写到/etc/rc.local文件里面。

 


 



 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
16天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
125 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
16天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
16天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
2月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
2月前
|
SQL 数据库
为什么SQL日志文件很大,该如何处理?
为什么SQL日志文件很大,该如何处理?
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
129 13
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
177 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
|
5月前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
171 1
下一篇
无影云桌面