Linux中的守护进程

Linux中的守护进程

前言

什么是守护进程:

  • 在后台运行,与任何终端无关。
  • 周期性的执行某种任务或等待处理特定事件。

守护进程的创建

  1. 先与终端脱离关系,让子进程变为孤儿进程。

  2. 子进程创建一个新的会话,并成为新的会话组长。

  3. 守护进程一直在后天运行,其工作目录不能被卸载,重新设定当前目录(假如是临时目录,容易出现问题,所以更改目录,路径不限定)

  4. 改变文件掩码,防止设置权限时受影响

  5. 关闭所有从父进程继承的打开文件

最后查看编写的程序是否为后台程序,关闭终端后是否会影响进程。

只能用kill杀死进程。

创建一个守护进程,将系统时间保存到log文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(){
pid_t pid;

pid = fork();
if(pid<0){
perror("fork");
return -1;
}else if(pid>0){
exit(0);
}

pid = setsid();
if(pid==-1){
perror("setsid");
return -1;
}

chdir("/");

umask(0);
int i;
for(i = 0;i<getdtablesize();i++){ //获取最大的文件描述符
close(i);
}

FILE *fp;
time_t ctm;
fp = fopen("1.log","w");
while(1){
ctm = time(NULL); //等价于time(&ctm)
fputs(ctime(&ctm),fp);
fflush(fp);
sleep(1);
}
}

Linux中的守护进程
https://ysc2.github.io/ysc2.github.io/2024/08/21/Linux中的守护进程/
作者
Ysc
发布于
2024年8月21日
许可协议