作者:强压谷攻 | 来源:互联网 | 2023-07-15 08:42
一、守护进程
守护进程是后台运行的、系统启动是就存在的、不予任何终端关联的,用于处理一些系统级别任务的特殊进程。
二、实现代码
#include
#include
#include
#include
#include
#include
#include static int writeMessage(char *message) {FILE *file = fopen("/pwx/test", "r+");fprintf(file, "%s", message);fclose(file);
}static int daemonize() {pid_t pid;pid &#61; fork();if (pid < 0) {writeMessage(strerror(errno));return 1;}if (pid > 0) {writeMessage(strerror(errno));_exit(0);}setsid();pid &#61; fork();if (pid < 0) {writeMessage(strerror(errno));return 1;}if (pid > 0) {writeMessage(strerror(errno));_exit(0);}if (chdir("/") < 0) {writeMessage(strerror(errno));return 1;}if (close(STDIN_FILENO)|| close(STDOUT_FILENO)|| close(STDERR_FILENO)) {writeMessage(strerror(errno));return 1;}if (signal(SIGPIPE, SIG_IGN) &#61;&#61; SIG_ERR) {}if (signal(SIGCHLD, SIG_IGN) &#61;&#61; SIG_ERR) {}return 0;}int main() {daemonize();FILE *file &#61; fopen("/pwx/time.log", "w&#43;");time_t t;while (1) {fseek(file, 0, SEEK_END);sleep(1);fprintf(file, "%s", asctime(&t));}}
三、相关函数
函数 | 描述 |
---|
void syslog(int priority, const chat *message, …); | 位于&#xff1a;; 功能&#xff1a;记录系统日志。 |
void openlog(const char *ident, int options, int facility); | 位于&#xff1a;; 功能&#xff1a;。 |
void closelog(void); | 位于&#xff1a;; 功能&#xff1a;关闭系统日志文件流; 返回&#xff1a;成功返回非空指针&#xff0c;出错返回-1。 |