閱讀771 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go android SQLite數據庫 一次性存儲多條數據
  下一篇:go HTTP方法的冪等性