让test2直接成为守护进程

[root@localhost 02]# cat test2.c
//test2
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<stdlib.h> int main(){ if(daemon(1,1)==-1){
perror("daemon error");
exit(EXIT_FAILURE);
} int i=0; while(1){
FILE *fd=fopen("test2.log","a");
fprintf(fd,"%d 1552227\n",i++);
sleep(1);
fclose(fd);
}
return 0;
}
[root@localhost 02]#

执行test2后生成了test2.log文件,不断更新的test2.log表示其在不断运行

32 1552227
33 1552227
34 1552227
35 1552227
36 1552227
37 1552227
38 1552227
39 1552227
40 1552227
[root@localhost 02]#

退出当前终端,(此时不再提示有进行中的任务)启用新终端,再观察test2.log

37 1552227
38 1552227
39 1552227
40 1552227
41 1552227
42 1552227
43 1552227
44 1552227
[root@localhost 02]#

发现程序依然在正常执行

使用

ps -xf

查看所有守护进程

  2761 ?        Sl     0:00  \_ /usr/libexec/evolution-addressbook-factory-subpr
2766 ? Sl 0:00 /usr/libexec/ibus-x11 --kill-daemon
2837 ? Sl 0:00 /usr/libexec/gvfsd-network --spawner :1.4 /org/gtk/g
2852 ? Sl 0:00 /usr/libexec/gvfsd-dnssd --spawner :1.4 /org/gtk/gvf
9158 ? Ss 0:00 ./test2
9187 ? Sl 0:00 /usr/sbin/abrt-dbus -t133
[root@localhost 02]#

./test2是顶级进程,没有父进程(不同于之前的以-bash作为父进程

在进程中打印信息,可以使用向log输出的方法,但是注意几点

  1. 写文件每次都要close,否则是写不进去的
  2. 要对程序写日志加以控制,否则会产生上GB的文本日志,多个写日志程序同时运行可能会宕机系统

Linux Guard Service - 守护进程的作用、用途、父进程标识的特点的更多相关文章

  1. Linux Guard Service - 守护进程再次分裂子进程

    当系统区内存不能再申请新进程的时候申请会失败 在512MB内存下最多分配的子进程数 3331 [root@localhost 05]# ./test5-1 50000 expect 50000 sub ...

  2. Linux Guard Service - 守护进程分裂

    分裂守护进程 由于fork()后第一行仍然在循环中,使用fork()返回值鉴别当前进程的性质 int i = 0; for (i = 0; i < 10; i++) { // sleep(1); ...

  3. Linux Guard Service - 杀死守护进程

    杀死某个子进程 杀死守护进程的子进程后,改进程会变为僵尸进程 14087 ? Ss 0:00 ./test4-1 14088 ? S 0:00 \_ ./test4-1 14089 ? S 0:00 ...

  4. Linux Guard Service - 进程分裂与脱离

    进程分裂更名 void set_ps_name(char *name) { prctl(PR_SET_NAME, name); } 修改进程长名称 备份进程环境变量空间 for (i = 1; i & ...

  5. Linux Guard Service - 前台进程和后台进程切换

    把一个正在执行的程序放入后台 [root@localhost 01]# Ctrl+Z 此使程序被移动到后台,但不能继续输出(处于暂停态) [root@localhost 01]# ./test1-1 ...

  6. Linux下利用fork()创建子进程并使父进程等待子进程结束

    int status; pid_t t = fork(); if(t){     waitpid(t, &status, 0); }else{     system("vi temp ...

  7. 2020-04-17:说说redis的rdb原理。假设服务器的内存8g,redis父进程占用了6g,子进程fork父进程后,子父进程总共占用内存12g,如何解决内存不足的问题?(挖)

    福哥答案2020-04-18: 这是一道挖坑题.内存占用只会比6g多一点,不会用12g.fork+cow.

  8. Android 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  9. 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

随机推荐

  1. JSP页面中的时间显示问题

    在JSP页面中往往要将时间显示为指定格式的,如果传入的是Date类型很好解决 <fmt:formatDate value="${orderTime}" pattern=&qu ...

  2. docker学习记录1

    起因 现在自己学习微服务,服务器越来越多,虽然自己写了一些shell脚本来安装需要的软件,比如mysql,redis,jdk等等,但是还是好麻烦.希望学习docker能够快速安装部署这些东西. 记录一 ...

  3. 杀死 ps grep 出来的所有进程

    ps -ef |grep HouseList_Day |awk

  4. springboot 中使用thymeleaf

    Spring Boot支持FreeMarker.Groovy.Thymeleaf和Mustache四种模板解析引擎,官方推荐使用Thymeleaf. spring-boot-starter-thyme ...

  5. Promethus安装指南

    由于Prometheus是go语言写的,所以不需要编译,安装的过程非常简单,仅需要解压然后运行.Prometheus官方下载地址:https://prometheus.io/download/ 安装P ...

  6. flask 数据迁移

    python flasky.py shell db.create_all() from app.models import User mhc = User("mhc") >& ...

  7. Linux实战教学笔记43:squid代理与缓存实践(二)

    第6章 squid代理模式案例 6.1 squid传统正向代理生产使用案例 6.1.1 squid传统正向代理两种方案 (1)普通代理服务器 作为代理服务器,这是SQUID的最基本功能:通过在squi ...

  8. UGUI防止穿透和判断点击的是否是UI

    用UGUI做的UI,比如按钮,点击一下,后面的3D物体也会接收到点击事件! 1.UGUI自带的防穿透代码: if (EventSystem.current.IsPointerOverGameObjec ...

  9. swift新建类和子类方法的重写与重载

    1.首先什么是重写与重载? 一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: ...

  10. 169. Majority Element 出现次数超过n/2的元素

    [抄题]: Given an array of size n, find the majority element. The majority element is the element that ...