linux提供了daemon函式用於建立守護程序,實現原理與上文中介紹的是一樣的。
#include
int daemon(int nochdir, int noclose);
1. daemon()函式主要用於希望脫離控制檯,以守護程序形式在後臺執行的程式。
2. 當nochdir為0時,daemon將更改進城的根目錄為root(“/”)。
3. 當noclose為0是,daemon將進城的STDIN, STDOUT, STDERR都重定向到/dev/null。
daemon的實現大致如下:
int daemon( int nochdir, int noclose )
{
pid_t pid;
if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那麼改變到"/"根目錄
return -1;
if ( !noclose ) //如果沒有noclose標誌
int fd = open("/dev/null", O_RDWR);
if ( fd < 0 )
/* 重定向標準輸入、輸出、錯誤 到/dev/null,
鍵盤的輸入將對程序無任何影響,程序的輸出也不會輸出到終端
*/
dup(fd, 0);
dup(fd, 1);
dup(fd, 2);
close(fd);
}
pid = fork(); //建立子程序.
if (pid < 0) //失敗
if (pid > 0)
_exit(0); //返回執行的是父程序,那麼父程序退出,讓子程序變成真正的孤兒程序.
//建立的 daemon子程序執行到這裡了
if ( setsid() < 0 ) //建立新的會話,並使得子程序成為新會話的領頭程序
return 0; //成功建立daemon子程序
使用例項:
int main()
daemon(1, 1); //引數根據需求確定
/* 在這裡新增你需要在後臺做的工作程式碼 */
如何殺死這樣的程序:
透過ps+grep找到對應的後臺程序,使用kill命令將程序殺死;也可建立shell指令碼對程序的啟動、關閉、重啟進行自動管理
linux提供了daemon函式用於建立守護程序,實現原理與上文中介紹的是一樣的。
#include
int daemon(int nochdir, int noclose);
1. daemon()函式主要用於希望脫離控制檯,以守護程序形式在後臺執行的程式。
2. 當nochdir為0時,daemon將更改進城的根目錄為root(“/”)。
3. 當noclose為0是,daemon將進城的STDIN, STDOUT, STDERR都重定向到/dev/null。
daemon的實現大致如下:
int daemon( int nochdir, int noclose )
{
pid_t pid;
if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那麼改變到"/"根目錄
return -1;
if ( !noclose ) //如果沒有noclose標誌
{
int fd = open("/dev/null", O_RDWR);
if ( fd < 0 )
return -1;
/* 重定向標準輸入、輸出、錯誤 到/dev/null,
鍵盤的輸入將對程序無任何影響,程序的輸出也不會輸出到終端
*/
dup(fd, 0);
dup(fd, 1);
dup(fd, 2);
close(fd);
}
pid = fork(); //建立子程序.
if (pid < 0) //失敗
return -1;
if (pid > 0)
_exit(0); //返回執行的是父程序,那麼父程序退出,讓子程序變成真正的孤兒程序.
//建立的 daemon子程序執行到這裡了
if ( setsid() < 0 ) //建立新的會話,並使得子程序成為新會話的領頭程序
return -1;
return 0; //成功建立daemon子程序
}
使用例項:
int main()
{
daemon(1, 1); //引數根據需求確定
/* 在這裡新增你需要在後臺做的工作程式碼 */
}
如何殺死這樣的程序:
透過ps+grep找到對應的後臺程序,使用kill命令將程序殺死;也可建立shell指令碼對程序的啟動、關閉、重啟進行自動管理