Linux下守護進程的建立

來源:互聯網
上載者:User
Linux下守護進程的建立
01-7-27 上午 10:30:08

Linux下守護進程的建立有很多的方法,比如我們可以使用cron,inetd等程式來建立。這裡我們介紹在控制終端上有使用者來啟動的精靈。這種精靈不依賴於任何一個終端,不會隨著使用者的退出而結束。這種程式經常用於網路程式之中。
將一個程式變為精靈一般按照下面的步驟。
調用函數fork,然後父進程推出,這樣子進程就變為了後台進程了。同時子進程不成為進程組的組長(組長可能是父進程或者是建立父進程的進程)為第二步系統調用setsid做準備。
調用setsid建立一個新的會議組,進程成為一個新的會議組的組長。這樣這個會議組就沒控制終端了。
添加訊號SIGHUP的處理。為後面的會議組長退出作出處理。同時再一次調用fork。然後父進程推出。由於進程組長退出時向所有會議成員發出SIGHUP,所以我忽略這個訊號。這樣我們的這個進程就沒有了控制終端了。
調用函數chdir將進程的工作目錄改到根目錄(/)。這樣我們的程式可以不佔用某個可卸載的裝置。防止root卸載裝置時系統報告裝置忙。
關閉所有的檔案描述符,同時重新導向3個標準檔案描述符。
下面的程式將建立一個精靈,這個程式重新導向了標準輸出,標準輸入,和標準錯誤輸出。 每分鐘向標準錯誤輸出可用的系統記憶體頁數。
 
#include
#include
#include
#include
#include
#include
#include
#include
#include
 
int main(int argc,char **argv)
{
struct sigaction act;
int error,in,out;
time_t now;
int memory;
 
/* 父進程退出 */
if(fork()!=0) exit(1);
 
/* 建立一個新的會議組 */
if(setsid()<0)exit(1);
 
/* 忽略訊號SIGHUP */
act.sa_handler=SIG_IGN;
sigemptyset(&act.sa_mask);
act.sa_flags=0;
if(sigaction(SIGHUP,&act,NULL)==-1)exit(1);
 
/* 子進程退出,孫進程沒有控制終端了 */
if(fork()!=0) exit(1);
 
if(chdir("/")==-1)exit(1);
 
/* 標準錯誤重新導向 */
error=open("/tmp/error",O_WRONLY|O_CREAT,0600);
dup2(error,STDERR_FILENO);
close(error);
 
/* 標準輸入重新導向 */
in=open("/tmp/in",O_RDONLY|O_CREAT,0600);
if(dup2(in,STDIN_FILENO)==-1)perror("in");
close(in);
 
/* 標準輸出重新導向 */
out=open("/tmp/out",O_WRONLY|O_CREAT,0600);
if(dup2(out,STDOUT_FILENO)==-1)perror("out");
close(out);
 
while(1)
{
time(&now);
memory=sysconf(_SC_AVPHYS_PAGES);
fprintf(stderr,"時間/t%s/t/t可用記憶體[%d]/n",ctime(&now),memory);
sleep(60);
}
exit(0);
}
 
運行這個程式後,使用ps -x命令可以看到這個程式的tty是?表示這個程式沒有控制終端。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.