讓test2直接成為守護進程
[root@localhost 02]# cat test2.c
//test2
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/stat.h>
#include<stdlib.h>
int main(){
if(daemon(1,1)==-1){
perror("daemon error");
exit(EXIT_FAILURE);
}
int i=0;
while(1){
FILE *fd=fopen("test2.log","a");
fprintf(fd,"%d 1552227\n",i++);
sleep(1);
fclose(fd);
}
return 0;
}
[root@localhost 02]#
執行test2后生成了test2.log文件,不斷更新的test2.log表示其在不斷運行
32 1552227
33 1552227
34 1552227
35 1552227
36 1552227
37 1552227
38 1552227
39 1552227
40 1552227
[root@localhost 02]#
退出當前終端,(此時不再提示有進行中的任務)啟用新終端,再觀察test2.log
37 1552227
38 1552227
39 1552227
40 1552227
41 1552227
42 1552227
43 1552227
44 1552227
[root@localhost 02]#
發現程序依然在正常執行
使用
ps -xf
查看所有守護進程
2761 ? Sl 0:00 \_ /usr/libexec/evolution-addressbook-factory-subpr
2766 ? Sl 0:00 /usr/libexec/ibus-x11 --kill-daemon
2837 ? Sl 0:00 /usr/libexec/gvfsd-network --spawner :1.4 /org/gtk/g
2852 ? Sl 0:00 /usr/libexec/gvfsd-dnssd --spawner :1.4 /org/gtk/gvf
9158 ? Ss 0:00 ./test2
9187 ? Sl 0:00 /usr/sbin/abrt-dbus -t133
[root@localhost 02]#
./test2是頂級進程,沒有父進程(不同於之前的以-bash作為父進程)
在進程中打印信息,可以使用向log輸出的方法,但是注意幾點
- 寫文件每次都要close,否則是寫不進去的
- 要對程序寫日志加以控制,否則會產生上GB的文本日志,多個寫日志程序同時運行可能會宕機系統
