Linux / 守护进程
生活随笔
收集整理的這篇文章主要介紹了
Linux / 守护进程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@time 2019-07-14
@author Ruo_Xiao
一、概念
守護進程是長期運行的、不與終端關聯的、后臺運行的進程。
二、栗子
#include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <sys/stat.h>// 創建守護進程。 int MyDaemon() {// 創建子進程。switch (fork()){// 創建線程錯誤。case -1:return -1;// 創建子進程成功,直接往下運行。case 0:break;// 父進程直接退出。default:exit(0);}// 運行至此,子進程變成孤兒進程,由 init(systemd) 收養。// 子進程創建新會話,并成為進程組組長和會話領頭進程,與終端脫離關聯。if (setsid() == -1)return -1;// 設置為 0,不讓其限制文件權限,以免引起混亂。umask(0);// 以讀寫的方式打開黑洞設備。int fd = open("/dev/null", O_RDWR);if (fd == -1)return -1;if (dup2(fd, STDIN_FILENO) == -1)return -1;if (dup2(fd, STDOUT_FILENO) == -1)return -1;if (dup2(fd, STDERR_FILENO) == -1)return -1;close(fd);return 0; }int main() {if (MyDaemon() != 0)return 1;while (true)sleep(1);return 0; }三、其他
1、cmd 指令?
ps -axj顯示的守護進程的名字中,帶“[]”的是內核守護進程,不帶的則是用戶級守護進程。
2、守護進程不會收到來自內核的 SIGHUP、SIGINIT 和 SIGWINCH 信號,如果守護進程收到該信號,說明該信號是來自其他進程的。程序員可以將這三個信號用于他用。
? ? ? ? 在 nginx 中, 配置文件被修改之后,nginx? reload 時,就是用 SIGHUP 信號來通知 nginx 來實現上述操作的。
3、拓展
- SIGHUP:終端關閉信號。
- SIGINIT:Ctrl + C 。
- SIGWINCH:終端大小改變信號。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的Linux / 守护进程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux / 僵尸进程、孤儿进程 产生
- 下一篇: 数据结构与算法 / 概念