### 守護(Daemon)進程
我們可以認為守護進程就是后臺服務進程,因為它會有一個很長的生命周期提供服務,關閉終端不會影響服務,也就是說可以忽略某些信號。
### 實現守護進程
首先要保證進程在后臺運行,可以在啟動程序后面加`&`,當然更原始的方法是進程自己`fork`然后結束父進程。
~~~
if (pid=fork()) {
exit(0); // Parent process
}
~~~
然后是與終端、進程組、會話(Session)分離。每個進程創建時都綁定一個終端,而且屬于一個進程組(進程組也有GID不過等同進程組長的PID),這些進程組在一個會話中,如果是子進程一般會從父進程繼承這些信息,想要與環境分離可以使用以下的系統調用。
~~~
setsid();
~~~
同樣地我們會從父進程繼承文件掩碼(mask),可以手動清理掩碼。
~~~
umask(0);
~~~
如果需要我們可以改變當前工作目錄,避免運行時必須使用當前所在的文件系統。
### 使用Nohup
前面提到過`nohup`命令,是讓程序以守護進程運行的方式之一,程序運行后忽略SIGHUP信號,也就說關閉終端不會影響進程的運行。
類似的命令還有`disown`,這里不再詳述。
- 前言
- 致謝
- 概述
- 使用代碼
- 使用Docker
- 進程基礎
- 進程是什么
- Hello World
- PID
- PPID
- 使用PID
- 進程名字
- 進程參數
- 輸入與輸出
- 并發與并行
- 進程越多越好
- 進程狀態
- 退出碼
- 進程資源
- 死鎖
- 活鎖
- POSIX
- Nohup
- 運行進程
- Go編程實例
- 衍生新進程
- 執行外部程序
- 復制進程
- 進程進階
- 文件鎖
- 孤兒進程
- 僵尸進程
- 守護進程
- 進程間通信
- 信號
- Linux系統調用
- 文件描述符
- Epoll
- 共享內存
- Copy On Write
- Cgroups
- Namespaces
- 項目實例Run
- 項目架構
- 代碼實現
- 注意事項
- 創建目錄權限
- 捕獲SIGKILL
- Sendfile系統調用
- 后記
- 參考書籍
- 項目學習
- 再次感謝