網站首頁 編程語言 正文
目錄
1.先來了解一下守護進程
2.創建一個守護進程的步驟
代碼實現:
運行結果:
1.先來了解一下守護進程
守護進程一直在后臺運行,和任何終端都不關聯。通常系統啟動時開始執行,系統關閉時結束。
2.創建一個守護進程的步驟
(1)創建子進程,退出父進程(使子進程成為后臺進程)
(2)設置新的會話(使進程完全獨立)
這里再講一下會話的概念,Linux以會話,進程組的方式管理進程。每個進程屬于一個進程組,會話則是一個或多個進程組的集合。通常用戶打開一個終端,系統就會創建一個會話,所有通過該終端運行的進程都屬于這個會話。
(3)設置工作目錄
將守護進程的工作目錄設置為根目錄,便于讓守護進程以絕對路徑的形式訪問資源
(4)重設文件掩碼
將文件掩碼設置為0,方便后續守護進程創建時,創建出來的文件權限符合我們的預期,增強守護進程的靈活性
(5)關閉從父進程繼承下來的文件描述符。子進程繼承了父進程已經打開的文件,這些文件可能永遠不會被守護進程讀寫,但一樣會消耗資源,所以需要關閉這些不用的文件描述符。
代碼實現:
這里守護進程實現的的功能為每5秒記錄一次系統時間
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
//1.創建子進程,關閉父進程
pid_t pid=0;
pid=fork();
if(pid<0)
{
perror("fork error");
return -1;
}
if(pid>0)
{
exit(0);//關閉父進程
}
//2.創建新會話
pid=setsid();
if(pid<0)
{
perror("setsid error");
return -1;
}
//3.設置工作目錄
chdir("/tmp");
//4.重設文件掩碼
umask(0);
//5.關閉從父進程繼承下來的文件描述符
int i=0;
for(i=0;i<getdtablesize();i++)
{
close(i);
}
//6.執行任務(每5秒記錄一次系統時間)
while(1)
{
system("echo `date` >> time.txt");
sleep(5);
}
return 0;
}
運行結果:
運行該程序,可以看到在根目錄tmp文件夾下多了一個time.txt文件。查看該文件,可以看到守護進程每5秒寫入的系統時間。
文章有概念不清晰或表述不正確的地方歡迎大家指正
?
原文鏈接:https://blog.csdn.net/m0_72772587/article/details/126692497
相關推薦
- 2022-12-27 C語言實現二叉樹鏈式結構的示例詳解_C 語言
- 2023-03-28 python程序中調用其他程序的實現_python
- 2022-04-22 qiankun框架下使用el-select或者分頁報錯Failed to execute ‘getC
- 2022-04-30 Django?RestFramework?全局異常處理詳解_python
- 2023-07-03 什么是懶加載,如何實現圖片或列表懶加載?
- 2022-11-08 切換tab時,van-list中的onload事件沒觸發
- 2022-09-21 Flutter自定義底部導航欄的方法_Android
- 2022-06-12 淺談Android?Dialog窗口機制_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支