ubuntu下編寫開機自啟守護進程,並記錄進程信息到日誌文件
步驟1:編寫守護進程
void init(){
pid_t pid;
int i;
pid=fork(); //創建第一子進程
if(pid<0) exit(1);//創建失敗退出
if(pid>0) exit(0);//父進程退出
setsid(); //第一子進程成為領頭進程,脫離終端
pid=fork(); //第一子進程生成第二子進程
if(pid<0) exit(1);//創建失敗退出
if(pid>0) exit(0);//第一子進程退出
chdir("/home/ling/文檔");//切換目錄
umask(0); //改變文件創建掩碼
for(i=0;i<NOFILE;i++) //關閉文件流
close(i);
}
注意這裏chdir函數中的路徑就是日誌文件的保存路徑。
步驟2:記錄進程信息到日誌文件
void main(){
char buf[256];
FILE *fp,*p;
init();
while(1){
sleep(30); //每30s記錄一次
if((fp=fopen(“test.log”,“a”))>=0){ //打開文件test.log,參數a表示以追加的形式打開
p=popen(“ps-eopid,user,cmd,start_time,etime”,“r”);//將指針p連接到ps命令的標準輸出
while(fgets(buf,sizeof(buf),p)!=0) //獲取輸出內容並保存在buf中
fprintf(fp,“%s\n”,buf); //以字符串的形式將buf中的內容寫到fp指定的文件中
pclose(p);
}
fclose(fp);
}
}
步驟3:編譯運行,設置開機啟動
編譯程序
命令行下執行:
gccprotect.c –o protect
得到可執行文件protect,再執行:
./protect
即可運行程序。
開機啟動
安裝sysv-rc-conf:
sudo apt-get installsysv-rc-conf
執行:
sudosysv-rc-conf 這裏是你的程序名稱 on
到這裏就可以的,但重啟之後你在終端會找不到這個程序的信息,但它其實在後台運行。
設置開機啟動的另一種方法就是直接把啟動命令寫到/etc/rc.local文件裏麵。
最後更新:2017-04-03 20:43:08