守護程式的概念和建立實驗
1.關於程式的幾個理解:
前臺程式是依賴於終端而存在的,一旦終端關閉了,前臺的程式也就關閉了,而其實真正的終端並非是我們所看到的終端,可以通過ctrl+alt+f5切換(巨集基)。關閉的終端並不影響後臺程式的執行。而且,值得注意的是守護程式只有在關機的時候才會停止執行。
2.
程式組:一個或多個程式的集合
前臺程式組:一個或多個前臺程式組的集合
後臺程式組:一個或多個後臺程式的集合
程式組id:程式組長程式id,一般是指第一個程式
會話:一個或多個程式組的集合(一次使用者登陸的過程)
3
在linux或者unix作業系統中在系統的引導的時候會開啟很多服務,這些服務就叫做守護程式。為了增加靈活性,root可以選擇系統開啟的模式,這些模式叫做執行級別,每一種執行級別以一定的方式配置系統。 守護程式是脫離於終端並且在後臺執行的程式。守護程式脫離於終端是為了避免程式在執行過程中的資訊在任何終端上顯示並且程式也不會被任何終端所產生的終端資訊所打斷。
4.守護程式的建立包括六個基本過程:
a。umask(0):重設檔案許可權掩碼
if(fork()<0) exit();
在Linux中父程式先於子程式退出會造成子程式成為孤兒程式,而每當系統發現一個孤兒程式時,就會自動由1號程式(init)收養它,這樣,原先的子程式就會變成init程式的子程式。
c:建立新會話:
會話週期:會話期是一個或多個程式組的集合。通常,一個會話開始於使用者登入,終止於使用者退出,在此期間該使用者執行的所有程式都屬於這個會話期。
d:更改目錄為根目錄,防止當前目錄被解除安裝:chdir("/");
e:關閉所有檔案描述符:同檔案許可權碼一樣,用fork函式新建的子程式會從父程式那裡繼承一些已經開啟了的檔案。這些被開啟的檔案可能永遠不會被守護程式讀寫,但它們一樣消耗系統資源,而且可能導致所在的檔案系統無法卸下。
for(i=0;i<getdtablesize();i++)
{
close(i);
}
f:int fd0,fd1,fd2;
fd0=open("/dev/null",O_RDWR);
fd1=dup(fd0);
fd2=dup(fd1);
這個操作是為 防止0,1,2的檔案操作符被使用。0是標準輸入,1是標準輸出,2是標準出錯。一旦被佔用,檔案內容會出錯。
實驗:
/*
============================================================================
Name : proteprocess.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
//實驗目的:主程式每隔一分鐘
#include <stdio.h>
#include <stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
void init_doeman(void)
{
umask(0);
int i,fd0,fd1,fd2;
if(fork()<0)
exit(0);
setsid();
chdir("/");
for(i=0;i<getdtablesize();i++)
{
close(i);
}
fd0=open("/dev/null",O_RDWR);
fd1=dup(fd0);
fd2=dup(fd1);
//exit(0);
}
int main(void)
{
FILE *fp;
time_t t;
init_doeman();
while(1)
{
sleep(2);//每隔兩秒鐘報告一下執行狀態
if((fp=fopen("test.log","a"))!=NULL)
{
t=time(0);
fprintf(fp,"I am here at %s/n",asctime(localtime(&t)));
fclose(fp);
}
}
return EXIT_SUCCESS;
}
相關文章
- Linux 守護程式和超級守護程式(xinetd)Linux
- PHP 實現守護程式PHP
- 守護程式
- PHP實現守護程式的啟動和終止操作PHP
- 使用 swoole 實現程式的守護(三)
- 使用 SWOOLE 實現程式的守護(一)
- 使用 SWOOLE 實現程式的守護(二)
- shell 指令碼實現的守護程式指令碼
- Node 程式守護
- rstatd守護程式
- gated 守護程式
- rsync 守護程式及實時同步
- 用Python實現守護程式Python
- Linux守護程式的程式設計實現(轉)Linux程式設計
- 程式守護 supervisor
- 守護程式那些事
- Linux 守護程式Linux
- PHP實現master-worker守護多程式PHPAST
- Android 通過JNI實現守護程式Android
- Golang 程式守護 SupervisorGolang
- PHP 編寫守護程式PHP
- Linux下的守護程式分析Linux
- 一個簡單的守護程式
- PHP 實現守護進PHP
- Python編寫守護程式程式Python
- Linux守護程式的啟動方法Linux
- Linux 守護程式的啟動方法Linux
- Linux守護程式及SystemdLinux
- Windows守護程式簡單示例Windows
- 用C語言在Linux系統下建立守護程式(Daemon)C語言Linux
- linux系統程式設計之程式(八):守護程式詳解及建立,daemon()使用Linux程式設計
- Packstack:建立概念驗證雲
- 守護程序
- 使用 PHP 自建穩定可靠的守護程式PHP
- rsync 守護程式備份報錯
- opentracker改造為daemon守護程式
- 程式守護系統,你懂嗎?
- 深入理解Linux守護程式Linux