成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Zabbix守護進程例子的分析

運維 系統運維
Zabbix是什么?Zabbix是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證服務器系統的安全運營;本文講述的是Zabbix守護進程例子的分析。

zabbix守護進程例子分析:

  很好的一個守護進程例子,貼出來,分析一下!

  1.   /******************************************************************************  
  2.  
  3.   * *  
  4.  
  5.   * Function: daemon_start *  
  6.  
  7.   * *  
  8.  
  9.   * Purpose: init process as daemon *  
  10.  
  11.   * *  
  12.  
  13.   * Parameters: allow_root - allow root permision for application *  
  14.  
  15.   * *  
  16.  
  17.   * Return value: *  
  18.  
  19.   * *  
  20.  
  21.   * Author: Alexei Vladishev *  
  22.  
  23.   * *  
  24.  
  25.   * Comments: it doesn't allow running under 'root' if allow_root is zero *  
  26.  
  27.   * *  
  28.  

  ******************************************************************************/

  1.   int daemon_start(int allow_root)  
  2.  
  3.   {  
  4.  
  5.   pid_t pid;  
  6.  
  7.   struct passwd *pwd;  
  8.  
  9.   struct sigaction phan;  
  10.  
  11.   char user[7] = "zabbix";  
  12.  
  13.   /* running as root ?*/  
  14.  
  15.   if((0 == allow_root) && (0 == getuid() || 0 == getgid()))  
  16.  
  17.   {  
  18.  
  19.   pwd = getpwnam(user); //從密碼文件中取得指定帳號的數據  
  20.  
  21.   if (NULL == pwd)  
  22.  
  23.   {  
  24.  
  25.   zbx_error("User %s does not exist.",  
  26.  
  27.   user);  
  28.  
  29.   zbx_error("Cannot run as root !");  
  30.  
  31.   exit(FAIL);  
  32.  
  33.   }  
  34.  
  35.   if(setgid(pwd->pw_gid) ==-1) //設置真實組識別碼  
  36.  
  37.   {  
  38.  
  39.   zbx_error("Cannot setgid to %s [%s].",  
  40.  
  41.   user,  
  42.  
  43.   strerror(errno));  
  44.  
  45.   exit(FAIL);  
  46.  
  47.   }  
  48.  
  49.   #ifdef HAVE_FUNCTION_INITGROUPS  
  50.  
  51.   if(initgroups(user, pwd->pw_gid) == -1) //初始化組清單,/etc/group中  
  52.  
  53.   {  
  54.  
  55.   zbx_error("Cannot initgroups to %s [%s].",  
  56.  
  57.   user,  
  58.  
  59.   strerror(errno));  
  60.  
  61.   exit(FAIL);  
  62.  
  63.   }  
  64.  
  65.   #endif /* HAVE_FUNCTION_INITGROUPS */  
  66.  
  67.   if(setuid(pwd->pw_uid) == -1) //設置用戶識別碼  
  68.  
  69.   {  
  70.  
  71.   zbx_error("Cannot setuid to %s [%s].",  
  72.  
  73.   user,  
  74.  
  75.   strerror(errno));  
  76.  
  77.   exit(FAIL);  
  78.  
  79.   }  
  80.  
  81.   #ifdef HAVE_FUNCTION_SETEUID  
  82.  
  83.   if( (setegid(pwd->pw_gid) ==-1) || (seteuid(pwd->pw_uid) == -1) )  
  84.  
  85.   {//重新設置當前進程的有效用戶,組識別碼  
  86.  
  87.   zbx_error("Cannot setegid or seteuid to zabbix [%s].", strerror(errno));  
  88.  
  89.   exit(FAIL);  
  90.  
  91.   }  
  92.  
  93.   #endif /* HAVE_FUNCTION_SETEUID */  
  94.  
  95.   }  
  96.  
  97.   if( (pid = zbx_fork()) != 0 ) //創建進程  
  98.  
  99.   {  
  100.  
  101.   exit( 0 );  
  102.  
  103.   }  
  104.  
  105.   setsid(); //創建一個新的對話期  
  106.  
  107.   signal( SIGHUP, SIG_IGN ); //設置信號  
  108.  
  109.   if( (pid = zbx_fork()) !=0 )  
  110.  
  111.   {  
  112.  
  113.   exit( 0 );  
  114.  
  115.   }  
  116.  
  117.   /* This is to eliminate warning: ignoring return value of chdir */  
  118.  
  119.   if(-1 == chdir("/")) //設置工作目錄  
  120.  
  121.   {  
  122.  
  123.   assert(0);  
  124.  
  125.   }  
  126.  
  127.   umask(0002); //設置新建文件的權限遮罩  
  128.  
  129.   redirect_std(CONFIG_LOG_FILE);  
  130.  
  131.   #ifdef HAVE_SYS_RESOURCE_SETPRIORITY  
  132.  
  133.   if(setpriority(PRIO_PROCESS,0,5)!=0) //設置程序進程執行優先權  
  134.  
  135.   {  
  136.  
  137.   zbx_error("Unable to set process priority to 5. Leaving default.");  
  138.  
  139.   }  
  140.  
  141.   #endif /* HAVE_SYS_RESOURCE_SETPRIORITY */  
  142.  
  143.   /*------------------------------------------------*/  
  144.  
  145.   if( FAIL == create_pid_file(APP_PID_FILE)) //pid 文件  
  146.  
  147.   {  
  148.  
  149.   exit(FAIL);  
  150.  
  151.   }  
  152.  
  153.   /* phan.sa_handler = child_signal_handler;*/  
  154.  
  155.   phan.sa_sigaction = child_signal_handler;  
  156.  
  157.   sigemptyset(&phan.sa_mask);  
  158.  
  159.   phan.sa_flags = SA_SIGINFO;  
  160.  
  161.   sigaction(SIGINT, &phan, NULL);  
  162.  
  163.   sigaction(SIGQUIT, &phan, NULL);  
  164.  
  165.   sigaction(SIGTERM, &phan, NULL);  
  166.  
  167.   sigaction(SIGPIPE, &phan, NULL);  
  168.  
  169.   zbx_setproctitle("main process");  
  170.  
  171.   return MAIN_ZABBIX_ENTRY(); //進入開始調用的主函數  
  172.  
  173.   }  

  Zabbix守護進程例子的分析就到這里了。下一節:Linux下如何安裝Cacti

【編輯推薦】

監控 Zabbix的應用

Linux安裝zabbix網絡監控系統

ZABBIX監控的操作步驟

責任編輯:zhaolei 來源: chinaunix
相關推薦

2010-06-28 14:52:30

cron進程

2017-04-11 16:00:40

Linuxsyslog進程

2010-03-02 16:37:53

Linux Quagg

2024-10-07 09:03:15

2010-03-16 13:41:09

Python進程

2009-11-24 11:35:59

2010-07-15 15:54:10

Perl守護進程

2025-05-29 08:10:00

Linux進程系統

2010-07-14 16:09:52

Telnet命令例子

2012-05-08 11:01:45

linux守護進程

2013-01-15 15:18:46

Linux守護進程

2024-08-29 13:23:04

WindowsGo語言

2010-07-15 15:47:46

Perl守護進程

2011-08-08 10:02:55

iPhone開發 進程 通信

2020-06-02 16:19:09

華為

2021-07-15 12:44:25

Shell編程進程

2009-10-22 17:18:20

CLR觸發器

2022-07-19 07:41:09

Centos8操作系統Nginx進程

2011-10-11 09:50:28

UNIXBIRD

2024-08-12 08:43:09

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品中文字幕在线 | 成人区一区二区三区 | 日韩另类 | av一区二区三区四区 | 久久久www成人免费精品张筱雨 | 国产影音先锋 | www.亚洲精品 | 夜夜爽99久久国产综合精品女不卡 | 欧美成人自拍视频 | 久久av一区二区三区 | 日韩一区二区三区在线播放 | 九九久久精品 | www.成人在线视频 | 一a一片一级一片啪啪 | 国产一区二区三区免费 | 国产精品一区二 | 久久国| 高清人人天天夜夜曰狠狠狠狠 | 午夜影院视频在线观看 | 国产免费一区二区 | 日韩中文字幕一区二区 | 手机av在线 | 超碰日本 | 九色91视频 | 欧美又大粗又爽又黄大片视频 | 国产成人a亚洲精品 | 日韩欧美中文在线 | 国产激情视频在线观看 | xxx国产精品视频 | 国产精品毛片在线 | 欧美日韩国产精品一区二区 | 在线高清免费观看视频 | 日韩精品免费视频 | 中文字幕一区二区三区四区不卡 | 一区二区在线不卡 | www性色 | 国产一区二区久久久 | 国内自拍视频在线观看 | 国产成人综合在线 | 日本大片在线播放 | 中文字幕免费视频 |