如何在 Linux 上设置守护程序? (linux 设置 守护程序)

Linux是一个流行的开源操作系统,被广泛应用于服务器环境中。作为服务器的操作系统,Linux需要稳定可靠地运行,而守护程序则是保证系统稳定的关键组成部分之一。守护程序可以在后台运行,定期执行一些任务或者等待某些事件发生,并对系统资源进行监控,以便在出现故障时能够快速相应。本文将讲解如何在Linux上设置守护程序。

一、什么是守护程序?

守护程序(daemon)是一种运行在后台的程序。在Linux系统中,守护程序通常运行在系统初始化时启动,并一直保持运行状态,直到系统关闭或者守护程序被手动关闭或者重新启动。

守护程序通常用于执行某些任务或者等待某些事件的发生。例如,一个邮件服务器的守护程序可以等待邮件的到达并将其存储在服务器上,一个Web服务器的守护程序可以等待客户端的请求并提供相应的服务。

二、如何创建守护程序?

在Linux系统中,我们可以使用系统提供的命令或者编写一些脚本来创建守护程序。一个基本的守护程序如下所示:

“`

#include

#include

#include

#include

#include

#include

#include

void daemonize(char *cmd)

{

int i, fd0, fd1, fd2;

pid_t pid;

struct sigaction sa;

// 1. Umask

umask(0);

// 2. Fork

if ((pid = fork())

exit(1);

} else if (pid != 0) { exit(0);

}

// 3. Setsid

setsid();

// 4. Signal handling

sa.sa_handler = SIG_IGN;

sigemptyset(&sa.sa_mask);

sa.sa_flags = 0;

if (sigaction(SIGHUP, &sa, NULL)

exit(1);

}

if ((pid = fork())

exit(1);

} else if (pid != 0) { exit(0);

}

// 5. Change directory

if (chdir(“/”)

exit(1);

}

// 6. Close file descriptors

close(0);

fd0 = open(“/dev/null”, O_RDWR);

fd1 = dup(0);

fd2 = dup(0);

// 7. Open syslog

openlog(cmd, LOG_CONS, LOG_DAEMON);

if (fd0 != 0 || fd1 != 1 || fd2 != 2) { syslog(LOG_ERR, “unexpected file descriptors %d %d %d”, fd0, fd1, fd2);

exit(1);

}

}

int mn(int argc, char **argv)

{

daemonize(argv[0]);

while (1) {

// Do something in background

sleep(10);

}

exit(0);

}

“`

这是一个简单的C语言程序,实现了守护程序的基本功能。程序的主要逻辑如下:

1. 使用umask函数设置文件权限掩码为0,以免受到继承自父进程的文件权限掩码的影响。

2. 调用fork函数创建一个新进程,并使该新进程成为父进程的子进程。如果fork失败,则直接退出程序。如果是父进程,则直接退出程序。

3. 调用setsid函数创建一个新的会话,并使该新会话成为进程组组长会话。因为会话是一个进程组的,所以在调用setsid函数之前,必须先创建一个新进程,以免影响之前的进程组。

4. 忽略SIGHUP信号。这样,即使父进程退出,子进程也不会因为收到SIGHUP信号而退出。

5. 调用chdir函数将当前工作目录更改为根目录,以使当前工作目录不受其他进程或设备的影响。

6. 调用close函数依次关闭标准输入、标准输出、标准错误,并使用open函数将它们分别映射到/dev/null文件描述符上,以防止向终端输出。

7. 调用openlog函数打开系统日志,以便在系统日志中记录日志消息。

在程序的mn函数中,我们调用daemonize函数来创建守护进程,并在while循环中做一些后台任务。

三、如何将守护程序设置为开机启动?

一旦我们创建了一个守护进程,我们也希望系统在每次启动时自动启动它。在Linux系统中,我们可以通过将守护进程的启动脚本复制到/etc/init.d目录,然后使用update-rc.d命令将其添加到系统启动脚本中。例如,假设我们已经创建了一个名为mydaemon的守护进程,并将其启动脚本保存在/etc/init.d目录下,那么我们可以按照以下步骤将其设置为开机启动:

1. 复制启动脚本到/etc/init.d目录:

“`

sudo cp mydaemon /etc/init.d

“`

2. 使用update-rc.d命令将其添加到系统启动脚本中:

“`

sudo update-rc.d mydaemon defaults

“`

现在,守护进程已经设置为开机启动了。

四、如何管理守护程序?

当我们创建了一个守护进程后,我们可能需要监控它的运行状态、停止它的运行、重新启动它等。在Linux系统中,我们可以使用以下命令来管理守护进程:

1. 使用ps命令查看守护程序运行状态:

“`

ps aux | grep mydaemon

“`

这条命令将列出所有正在运行的mydaemon守护进程的信息。

2. 使用kill命令停止守护程序:

“`

sudo kill [pid]

“`

这条命令将停止指定pid的守护进程。

3. 使用service命令重新启动或停止守护程序:

“`

sudo service mydaemon restart

sudo service mydaemon stop

“`

这些命令将重新启动或停止mydaemon守护进程。

五、

相关问题拓展阅读:

如何在Linux下用c语言创建守护进程并监控系统运行期间的所有进程

可以分三步来做:

做两个简单的铅信守护进程,并能正常运行

监控进程是否在运行

启袜闷动进程

综合起来就可以了,代码如下:

被监控进程thisisatest.c

#include

#include

#include

#include

#include

#include

#include槐好轮

#include

void init_daemon()

Linux下怎么查看某个守护进程或者所有的守护进程?

命令ps

  查看守候进程的命令可以使用ps完成。

  进程一般分为交互进程、批处理进程和守护进程(daemons)三类。值得一提的是守护进程总是活跃的,一般在后台运行,守护进程一般由系统在开机时通过脚本自动激活启动或由超级管理用户root来启动。比如在Fedora或Redhat中,我们可以定义httpd服务器的启动脚本的运行级别,此文件位于/etc/init.d目录下,文件名是httpd,/etc/init.d/httpd 就是httpd服务器的守护程序,当把它的运行级别设置为3和5时,当系统启动时橡物,它会跟着启动。

# chkconfig –level 35 httpd on

  由于守护进程是一直运行着的,所以它所处的状态是等待请求处理任务。例如通常大网站的Apache服务器都在运行,等待着用户来访问,也就是等待着任务处理。羡数

  Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程来执行的。守护进程是生存期长的一种进程。它们独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它们常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务器都是用守护进程实现的。同时,守护进程完成许多系统任务,比如,作业规划进程crond、打印进程lqd等。有些书籍和资料也把守护进程称为”服务”。选择运行哪些兄如首守护进程,要根据具体需求决定。查看系统可以提供的守护进程对应的服务,打开一个终端以root权限运行ntsysv命令。

ps 命令………..

最简单的.

ps aux 就能查看所有进程

艹··这个坟挖的··········

关于linux 设置 守护程序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何在 Linux 上设置守护程序? (linux 设置 守护程序)