Linux Guard Service - 守護進程的作用、用途、父進程標識的特點


讓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的文本日志,多個寫日志程序同時運行可能會宕機系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM