1. 程式人生 > >wuhran的Blog-C++,Linux,MySQL,PHP

wuhran的Blog-C++,Linux,MySQL,PHP

  在linux或者unix作業系統中在系統的引導的時候會開啟很多服務,這些服務就叫做守護程序。為了增加靈活性,root可以選擇系統開啟的模式,這些模式叫做執行級別,每一種執行級別以一定的方式配置系統。
  守護程序是脫離於終端並且在後臺執行的程序。守護程序脫離於終端是為了避免程序在執行過程中的資訊在任何終端上顯示並且程序也不會被任何終端所產生的終端資訊所打斷。
  守護程序,也就是通常說的Daemon程序,是Linux中的後臺服務程序。它是一個生存期較長的程序,通常獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護程序常常在系統引導裝入時啟動,在系統關閉時終止。Linux系統有很多守護程序,大多數服務都是通過守護程序實現的,同時,守護程序還能完成許多系統任務,例如,作業規劃程序crond、列印程序lqd等(這裡的結尾字母d就是Daemon的意思)。
  由於在Linux中,每一個系統與使用者進行交流的介面稱為終端,每一個從此終端開始執行的程序都會依附於這個終端,這個終端就稱為這些程序的控制終端,當控制終端被關閉時,相應的程序都會自動關閉。但是守護程序卻能夠突破這種限制,它從被執行開始運轉,直到整個系統關閉時才退出。如果想讓某個程序不因為使用者或終端或其他地變化而受到影響,那麼就必須把這個程序變成一個守護程序。
  建立一個簡單的守護程序:
  1、建立子程序,父程序退出
  這是編寫守護程序的第一步。由於守護程序是脫離控制終端的,因此,完成第一步後就會在Shell終端裡造成一程式已經執行完畢的假象。之後的所有工作都在子程序中完成,而使用者在Shell終端裡則可以執行其他命令,從而在形式上做到了與控制終端的脫離。
  在Linux中腹程序先於子程序退出會造成子程序成為孤兒程序,而每當系統發現一個孤兒程序是,就會自動由1號程序(init)收養它,這樣,原先的子程序就會變成init程序的子程序。
  2、在子程序中建立新會話
  這個步驟是建立守護程序中最重要的一步,雖然它的實現非常簡單,但它的意義卻非常重大。在這裡使用的是系統函式setsid,在具體介紹setsid之前,首先要了解兩個概念:程序組和會話期
  程序組:是一個或多個程序的集合。程序組有程序組ID來唯一標識。除了程序號(PID)之外,程序組ID也是一個程序的必備屬性。每個程序組都有一個組長程序,其組長程序的程序號等於程序組ID。且該程序組ID不會因組長程序的退出而受到影響。
  會話週期:會話期是一個或多個程序組的集合。通常,一個會話開始與使用者登入,終止於使用者退出,在此期間該使用者執行的所有程序都屬於這個會話期。
  接下來就可以具體介紹setsid的相關內容:
  (1)setsid函式作用:
  setsid函式用於建立一個新的會話,並擔任該會話組的組長。呼叫setsid有下面的3個作用:
  讓程序擺脫原會話的控制
  讓程序擺脫原程序組的控制
  讓程序擺脫原控制終端的控制
  那麼,在建立守護程序時為什麼要呼叫setsid函式呢?由於建立守護程序的第一步呼叫了fork函式來建立子程序,再將父程序退出。由於在呼叫了fork函式時,子程序全盤拷貝了父程序的會話期、程序組、控制終端等,雖然父程序退出了,但會話期、程序組、控制終端等並沒有改變,因此,還還不是真正意義上的獨立開來,而setsid函式能夠使程序完全獨立出來,從而擺脫其他程序的控制。
  3、改變當前目錄為根目錄
  這一步也是必要的步驟。使用fork建立的子程序繼承了父程序的當前工作目錄。由於在程序執行中,當前目錄所在的檔案系統(如“/mnt/usb”)是不能解除安裝的,這對以後的使用會造成諸多的麻煩(比如系統由於某種原因要進入但使用者模式)。因此,通常的做法是讓"/"作為shohujincheng 的當前工作目錄,這樣就可以避免上述的問題,當然,如有特殊需要,也可以把當前工作目錄換成其他的路徑,如/tmp。改變工作目錄的常見函式式chdir。
  4、重設檔案許可權掩碼
  檔案許可權掩碼是指遮蔽掉檔案許可權中的對應位。比如,有個檔案許可權掩碼是050,它就遮蔽了檔案組擁有者的可讀與可執行許可權。由於使用fork函式新建的子程序繼承了父程序的檔案許可權掩碼,這就給該子程序使用檔案帶來了諸多的麻煩。因此,把檔案許可權掩碼設定為0,可以大大增強該守護程序的靈活性。設定檔案許可權掩碼的函式是umask。在這裡,通常的使用方法為umask(0)。
  5、關閉檔案描述符
  同文件許可權碼一樣,用fork函式新建的子程序會從父程序那裡繼承一些已經打開了的檔案。這些被開啟的檔案可能永遠不會被守護程序讀寫,但它們一樣消耗系統資源,而且可能導致所在的檔案系統無法卸下。
  在上面的第二步之後,守護程序已經與所屬的控制終端失去了聯絡。因此從終端輸入的字元不可能達到守護程序,守護程序中用常規方法(如printf)輸出的字元也不可能在終端上顯示出來。所以,檔案描述符為0、1和2 的3個檔案(常說的輸入、輸出和報錯)已經失去了存在的價值,也應被關閉。通常按如下方式關閉檔案描述符:
  ===============================
  for(i=0;i<MAXFILE;i++)
  close(i);
  ===============================
  這樣,一個簡單的守護程序就建立起來了。
  實現守護程序的完整例項(每隔10s在/tmp/dameon.log中寫入一句話):
  =====================================================================
  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  #include<fcntl.h>
  #include<sys/types.h>
  #include<unistd.h>
  #include<sys/wait.h>
  #define MAXFILE 65535
  int main()
  {
  pid_t pc;
  int i,fd,len;
  char *buf="this is a Dameon/n";
  len = strlen(buf);
  pc = fork(); //第一步
  if(pc<0){
  printf("error fork/n");
  exit(1);
  }
  else if(PC>0)
  exit(0);
  setsid(); //第二步
  chdir("/"); //第三步
  umask(0); //第四步
  for(i=0;i<MAXFILE;i++) //第五步
  close(i);
  while(1){
  if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0){
  perror("open");
  exit(1);
  }
  write(fd,buf,len+1);
  close(fd);
  sleep(10);
  }
  }
  

相關推薦

wuhran的Blog-C++,Linux,MySQL,PHP

  在linux或者unix作業系統中在系統的引導的時候會開啟很多服務,這些服務就叫做守護程序。為了增加靈活性,root可以選擇系統開啟的模式,這些模式叫做執行級別,每一種執行級別以一定的方式配置系統。  守護程序是脫離於終端並且在後臺執行的程序。守護程序脫離於終端是為了避免程序在執行過程中的資訊在任何終端上

Linux MySql+Php詳細配製

轉自:http://www.jb51.net/article/23255.htm 無意中還找到了CentOS的專業論壇,記住:http://www.centospub.com  於是,開始的學習配置 本次環境: CentOS系統, mysql-server(版本忘了,因為是

汪雨田的專欄----c語言,演算法設計,php,linux,mysql

       最近遇到一個在C語言當中處理中文的問題,因為漢字和ascii不同,漢字是多位元組編碼方式,ascii只用一個位元組表示,所以在用c語言提供的strlen函式得到的長度是位元組長度;  以下都是utf-8編碼方式,為了得到一個字元(漢字和ascii)有幾種處理

Linux配置Nginx,MySql,php-fpm開機啟動的方法

sleep 管理 support dev view linux 使用 pre work 一. Nginx 開機啟動 NGINX SHELL腳本 放到/etc/init.d/下取名nginx 下面代碼裏根據你原始安裝路徑去更改 nginx="/usr/localinx/s

【轉載】Linux查看 apache,mysql,php安裝路徑

my.cnf sdn mysql目錄 pan sbin dump lin tail art 原文鏈接:http://blog.csdn.net/pengone/article/details/50035889 apache: 如果采用RPM包安裝,安裝路徑應在 /e

Linux+Apache+Mysql+PHP優化技巧

建議 發生 /dev/ 意義 mac 恢復文件 客戶 效果 slave LAMP 平臺由四個組件組成,呈分層結構。每一層都提供了整個軟件棧的一個關鍵部分:Linux、Apache、MySQL、PHP。 LAMP這個詞的由來最早始於德國雜誌“c‘t Maga

linux+nginx+mysql+php環境的搭建

地址 index src 報錯 開始 log 簡單 x86 use 本文主要介紹,簡單的搭建lnmp環境,自己的環境,自己做主 準備要求:全新的liunx環境,本文用的是centerOS6.0 廢話不多說,直接看步驟: 1、開啟nginx80端口和mysql3306端口  

CentOS 6.5下源碼安裝LAMP(Linux+Apache+Mysql+Php)環境

onf 服務器 mysqld pep usr cnblogs char 格式 hash ---恢復內容開始--- 一、系統環境 系統平臺:CentOS 6.5 (Final) Apache版本:httpd-2.2.31.tar.gz(最新版本2015-07-16) M

Linux 下配置Nginx,MySql,php-fpm開機啟動

開機 日誌 perf rman gin form force roc man 一. Nginx 開機啟動 1、在/etc/init.d/目錄下創建腳本 vim /etc/init.d/nginx 2、編寫腳本內容 (將以下復制進去相應改動安裝路徑) #!/bin/ba

linux-apache-mysql-php

lanpCentOS release 6.5 (Final)x86_64 apache:wget http://archive.apache.org/dist/httpd/httpd-2.2.27.tar.gztar cd ./configure --prifix=/application/apache2.2

centos下部署LAMP環境(Linux+Apache+mysql+php)(轉載文章:https://www.cnblogs.com/apro-abra/p/4862285.html)

roo -s -c ice 自己 sql all p地址 iptable 一:安裝apache 1.安裝yum -y install httpd2.開啟apache服務systemctl start httpd.service3.設置apache服務開機啟動systemct

14.LAMP服務 Linux Apache Mysql Php和防護機制 xinetd、tcp wapper

遠程 wrap light disable scp 機制 鏈接服務器 tab 配置ssh 一.安裝LAMP服務 Linux Apache Mysql Php 要求操作系統支持 php解析 apache調用php插件解析 phpmyadmin yum

阿里雲ECS 搭建 Linux+Nginx+Mysql+PHP環境 & 部署php的laravel專案

https://www.cnblogs.com/chenjingxuan/p/8072923.html   在阿里雲買ECS的時候選擇自己習慣的映象系統,我一般都是使用Linux Ubuntu,所以,以下的配置都是在Ubuntu 14.04穩定支援版的環境中搭建Linux+Ngin

如何在伺服器上搭建一個lamp(Linux(CentOS7)+Apache+MySQL+PHP)環境

一、 安裝Apache 1.安裝 yum -y install httpd 1 2.開啟apache服務 systemctl start httpd.service 1 3.設定apache服務開機啟動 systemctl enable httpd.service

如何在Ubuntu16.04 中安裝Linux, Nginx, MySQL, PHP (LEMP 棧)

介紹 LEMP 棧是用來開發動態網頁和web 應用程式的一系列軟體集合,LEMP描述的是Linux作業系統,Nginx web 伺服器,以及後端資料儲存MySQL/MariaDB資料庫和伺服器端動態指令碼語言PHP. 在此教程中,我們將會演示如何在Ubuntu 16.04 伺服器中安裝一個完整的LE

Centos7.0伺服器上搭建Linux+Apache+php+Mysql環境

一.安裝Linux系統 1.1虛擬機器搭建Linux Centos7.0版本,搭建過程省略。   二. 安裝apache、php、mysql、php-gd等元件。 2.1安裝Apache服務程式(apache服務的軟體包名稱叫做httpd)。 [[email protect

linux一鍵安裝MySQL,PHP,Nginx,Apache,memcached,Redis,HHVM

  這個指令碼是使用shell編寫,為了快速在生產環境上部署lnmp/lamp/lnmpa(Linux、Nginx/Tengine/OpenResty、MySQL/MariaDB/Percona、PHP),適用於CentOS 6~7(包括redhat)、Debian 6~8、Ubuntu

Linux/Ubuntu16.04+Nginx+Mysql+PHP 搭建wordpress

首先安裝Linux,Nginx,MySQL,PHP(LEMP堆疊) 第一步:安裝Nginx sudo apt-get update sudo apt-get install nginx 此時訪問你的伺服器地址應該會出現這個畫面 第二步:安裝MySQL以管理站點資料

採用LAMP網站架構(Linux+Apache+MySQL+PHP

 LAMP指的Linux(作業系統)、Apache(HTTP 伺服器),MySQL(資料庫軟體) 和PHP(有時也是指Perl或Python) 的縮寫,一般用來搭建web 伺服器。 (1)Mysql 5.6 1.下載mysql-server檔

LAMP架構的搭建(Linux+Nginx+MySQL+PHP原始碼安裝 )+Discuz論壇的搭建

手動用CentOS7.0搭建php環境安裝Discuz論壇 1、安裝搭建論壇必要的軟體 apache php mysql CentOS系統我們可以直接使用 yum install 的方式進行軟體安裝, CentOS官方的安裝源,包涵的軟體都是當前最穩定的版本,因此直接安裝即可