日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux 守护进程_Linux 守护进程

發(fā)布時間:2024/10/14 100 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 守护进程_Linux 守护进程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

Linux 平臺下,經(jīng)常需要程序脫離終端在后臺運行,很多程序在啟動的時候需要加 -d 參數(shù),這一般代表以守護進程(后臺進進程)的方式啟動。那么怎么啟動守護進程呢?

創(chuàng)建方式

//程序退出的默認動作void?prog_exit(int?signo){std::cout?<"program?recv?signal?"?<"?to?exit."?<std::endl;?

????//釋放資源
}


void?daemon_run(){
????int?pid;
????signal(SIGCHLD,?SIG_IGN);
????//1)在父進程中,fork返回新創(chuàng)建子進程的進程ID;
????//2)在子進程中,fork返回0;
????//3)如果出現(xiàn)錯誤,fork返回一個負值;
????pid?=?fork();
????if?(pid?0)
????{
????????std::?cout?<"fork?error"?<std::endl;
????????exit(-1);
????}
????//父進程退出,子進程獨立運行
????else?if?(pid?>?0)?{
????????exit(0);
????}
????//之前parent和child運行在同一個session里,parent是會話(session)的領(lǐng)頭進程,
????//parent進程作為會話的領(lǐng)頭進程,如果exit結(jié)束執(zhí)行的話,那么子進程會成為孤兒進程,并被init收養(yǎng)。
????//執(zhí)行setsid()之后,child將重新獲得一個新的會話(session)id。
????//這時parent退出之后,將不會影響到child了。
????setsid();
????int?fd;
????fd?=?open("/dev/null",?O_RDWR,?0);
????if?(fd?!=?-1)
????{
????????dup2(fd,?STDIN_FILENO);
????????dup2(fd,?STDOUT_FILENO);
????????dup2(fd,?STDERR_FILENO);
????}
????if?(fd?>?2)
????????close(fd);
}

int?main()?{
????//設(shè)置信號處理,為了防止守護進程在沒有運行起來之前,控制終端受到干擾或掛起
????signal(SIGCHLD,?SIG_DFL);
????signal(SIGPIPE,?SIG_IGN);
????signal(SIGINT,?prog_exit);
????signal(SIGKILL,?prog_exit);
????signal(SIGTERM,?prog_exit);

????bool?bdaemon?=?false;
????while?((ch?=?getopt(argc,?argv,?"p:d"))?!=?-1)
????{
????????switch?(ch)
????????{
????????case?'d':
????????????bdaemon?=?true;
????????????break;
????}

????if?(bdaemon)
????????daemon_run();

}

可以將上述代碼放入你的項目中,運行時候加 -d 參數(shù),即可實現(xiàn)守護進程的方式啟動。

總結(jié)

以上是生活随笔為你收集整理的linux 守护进程_Linux 守护进程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。