热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UNIX环境高级编程守护进程

      相关函数列表 //sysl



 

 

 


相关函数列表

//syslog函数
#include
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format,...);
void closelog(void);
int setlogmask(int maskpri);
//除syslog,很多平台还提供它的一种变体来处理可变参数列表
#include
#include
void vsyslog(int priority, const char *format, va_list arg);

 

 


ps -efj


结构如下

UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Aug07 ? 00:00:01 /sbin/init
root 2 0 0 0 0 Aug07 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Aug07 ? 00:00:00 [migration/0]
root 4 2 0 0 0 Aug07 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Aug07 ? 00:00:00 [migration/0]
root 6 2 0 0 0 Aug07 ? 00:00:10 [watchdog/0]
root 7 2 0 0 0 Aug07 ? 00:03:41 [events/0]
root 8 2 0 0 0 Aug07 ? 00:00:00 [cgroup]
root 9 2 0 0 0 Aug07 ? 00:00:00 [khelper]
root 10 2 0 0 0 Aug07 ? 00:00:00 [netns]
root 11 2 0 0 0 Aug07 ? 00:00:00 [async/mgr]
root 12 2 0 0 0 Aug07 ? 00:00:00 [pm]
root 13 2 0 0 0 Aug07 ? 00:00:18 [sync_supers]
root 14 2 0 0 0 Aug07 ? 00:00:20 [bdi-default]
root 15 2 0 0 0 Aug07 ? 00:00:00 [kintegrityd/0]
root 16 2 0 0 0 Aug07 ? 00:00:01 [kblockd/0]
root 17 2 0 0 0 Aug07 ? 00:00:00 [kacpid]
root 18 2 0 0 0 Aug07 ? 00:00:00 [kacpi_notify]
root 19 2 0 0 0 Aug07 ? 00:00:00 [kacpi_hotplug]
root 20 2 0 0 0 Aug07 ? 00:00:00 [ata/0]
root 21 2 0 0 0 Aug07 ? 00:00:00 [ata_aux]
root 22 2 0 0 0 Aug07 ? 00:00:00 [ksuspend_usbd]
root 23 2 0 0 0 Aug07 ? 00:00:00 [khubd]
root 24 2 0 0 0 Aug07 ? 00:00:00 [kseriod]
root 25 2 0 0 0 Aug07 ? 00:00:00 [md/0]
root 26 2 0 0 0 Aug07 ? 00:00:00 [md_misc/0]
root 27 2 0 0 0 Aug07 ? 00:00:01 [khungtaskd]
root 28 2 0 0 0 Aug07 ? 00:00:00 [kswapd0]
root 29 2 0 0 0 Aug07 ? 00:00:00 [ksmd]
root 30 2 0 0 0 Aug07 ? 00:00:00 [khugepaged]
root 31 2 0 0 0 Aug07 ? 00:00:00 [aio/0]
root 32 2 0 0 0 Aug07 ? 00:00:00 [crypto/0]
root 37 2 0 0 0 Aug07 ? 00:00:00 [kthrotld/0]
root 39 2 0 0 0 Aug07 ? 00:00:00 [kpsmoused]
root 40 2 0 0 0 Aug07 ? 00:00:00 [usbhid_resumer]
root 70 2 0 0 0 Aug07 ? 00:00:00 [kstriped]
root 275 2 0 0 0 Aug07 ? 00:00:00 [scsi_eh_0]
root 276 2 0 0 0 Aug07 ? 00:00:00 [scsi_eh_1]
root 359 2 0 0 0 Aug07 ? 00:00:00 [virtio-blk]
root 380 2 0 0 0 Aug07 ? 00:00:00 [jbd2/vda1-8]
root 381 2 0 0 0 Aug07 ? 00:00:00 [ext4-dio-unwrit]
root 430 2 0 0 0 Aug07 ? 00:00:00 [kauditd]
root 709 2 0 0 0 Aug07 ? 00:00:00 [virtio-net]
root 839 2 0 0 0 Aug07 ? 00:00:00 [vballoon]
root 906 2 0 0 0 Aug07 ? 00:00:00 [kjournald]

以上分别是用户ID,进程ID,父进程ID,进程组ID,会话ID,终端名称以及命令字符串

 

 


Linux中的守护进程

1.kswapd守护进程也称为内存换页守护进程。它支持虚拟内存子系统在经过一段时间后将脏页面慢慢的写会

   磁盘来回收这些页面

2.flush守护进程再可用内存达到设置的最小阀值时将脏页面刷新到磁盘。它也定期的将脏页面刷新回磁盘来

   减少在系统出现故障时发生的数据丢失。多个刷新守护进程可以同时存在,每个写回设备都有一个刷新守护

   进程。输出实例中显示一个名为flush-8:0的刷新守护进程。从名字可以看出,写回设备室通过主设备号(8)和

   副设备号(0)来识别的

3.sync_supers守护进程定期将文件系统刷新到磁盘

4.jbd守护进程帮助实现了ext4文件系统中的日志功能

5.rpcbind守护进程提供将远程过程调用(Remote Procedure Call RPC)程序号映射为网络端口号的服务。

   syslogd守护进程可以被由管理员启动的将系统消息记入日志的任何程序使用。可以在一台实际的控制台上

   打印这些消息,也可以将他们写到一个文件中。

6.cron守护进程再定期安排的日期和时间执行命令。

 

 


编写守护进程时需要遵循一些基本规则

,以防产生不必要的交互:

1)首先调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0),由继承的来的文件模式创建屏蔽字

   可能会被设置为拒绝某些权限。如果守护进程要创建文件,那么它可能要设置特定的权限。

2)调用fork,然后使父进程exit,这样做实现下面几点

    a)如果该守护进程是作为第一条简单的shell命令启动的,那么父进程终止会让shell认为这条命令已经执行

       完毕

     b)虽然子进程继承了父进程的进程组ID,但获得了一个新的进程ID,这样就保证了子进程不是一个进程组

        的组长进程,这是虾米要进行的setsid调用的先决条件

3)调用setsid建一个会话,然后

     a)使进程成为会话的首进程

     b)成为一个新进程进程组的组长进程

     c)没有控制终端

4)将当前工作目录更改为根目录。从父进程处继承过来的当前工作目录可能再一个挂载的文件系统中。因为

    守护进程通常在系统再引导之前是一直存在的,所以如果守护进程的当前工作目录在一个挂载文件系统

    中,那么该文件系统就不能被卸载。

5)关闭不在需要的文件描述符,这使得守护进程不再持有从父进程继承来的任何文件描述符(父进程可能是

    shell进程,或者其他某个进程)。可以使用open_max函数或getrlimit函数来判定最高文件描述符值,并

    关闭知道该值的所有描述符

6)某些守护进程打开/dev/null使其具有文件描述符0,1,2这样,任何一个试图读标准输入,写标准输出

   或标准错误的库例程都不会产生任何效果。因为守护进程并不与终端设备相关联

 

 

 


出错记录

守护进程调用syslog函数,将日志写入到一个集中式的地方

有以下三种产生日志消息的方法

1)内核例程可以调用log函数,任何一个用户进程都可以通过打开(open)并读取/dev/klog设备来读取这些

   消息

2)大多数用户进程(守护进程)调用syslog函数来产生日志消息,这使得消息发送至UNIX域数据报字段/dev/log

3)无论一个用户进程是在此主机上,还是通过TCP/IP网络连接到此主机的其他主机上,都可以将日志消息

   发向UDP端口514。syslog函数从不产生这些UDP数据报他们要求产生次消息日志的进程进行显示的网络

   编程

 


BSD的syslog设施


UNIX环境高级编程 守护进程


 

 

 


syslog的 openlog函数的option参数

































option

说明

LOG_CONS

若日志消息不能通过UNXI域数据报发送至syslogd,则将消息写至控制台

LOG_NEDLAY

立即打开至syslogd守护进程的UNIX域数据报套接字,不要等到第一条消息已经被记录时

再打开。通常在记录第一条消息之前,不打开该套接字


LOG_NOWAIT

不要等待在将消息记入日志过程中可能已创建的子进程。因为再syslog调用wait时,应用

程序可能已获得了子进程的状态,这种处理阻止了与捕捉SIGCHLD信号的应用程序之间

产生的冲突


LOG_ODELAY

在第一条消息被记录之前延迟打开至syslogd守护进程的连接

LOG_PERROR

除将日志消息发送给syslogd外,还将它写至标准出错(在Solaris上不可用)

LOG_PID

记录每条消息都要包含进程ID,此选项可供对每个不同的请求都fork一个子进程的守护

进程使用(与从不调用fork的守护进程相比较,如syslogd)


 


openlog的facility参数









































































































facility

说明

LOG_AUDIT

审计设施

LOG_AUTH

授权程序login,su,getty等

LOG_AUTHPRIV

与LOG_AUTH相同,但写日志文件时

具有权限限制


LOG_CONCOLE

将消息写入/dev/console

LOG_CRON

cron和at

LOG_DAEMON

系统守护进程inetd,routed等

LOG_FTP

FTP守护进程ftpd

LOG_KERN

内核产生消息

LOG_LOCAL0

保留由本地使用

LOG_LOCAL1

保留由本地使用

LOG_LOCAL2

保留由本地使用

LOG_LOCAL3

保留由本地使用

LOG_LOCAL4

保留由本地使用

LOG_LOCAL5

保留由本地使用

LOG_LOCAL6

保留由本地使用

LOG_LOCAL7

保留由本地使用

LOG_LPR

行式打印机系统lpd,lpc等

LOG_MAIL

邮件系统

LOG_NEWS

Usenet网络新闻系统

LOG_NTP

网络时间协议系统

LOG_SECURITY

安全子系统

LOG_SYSLOG

syslogd收紧进程本身

LOG_USER

来自掐用户进程的消息(默认)

LOG_UUCP

UUCP系统

 


syslog中的level(按序排列)









































level

说明

LOG_EMERG

紧急(系统不可使用)(最高优先级)

LOG_ALERT

必须立即修复的情况

LOG_CRIT

严重情况(如硬件设备处错)

LOG_ERR

出错情况

LOG_WARNING

警告情况

LOG_NOTICE

正常但重要的情况

LOG_INFO

信息性消息

LOG_DEBUG

调试消息(最低优先级)

 

 

 


守护进程遵循以下通用惯例:

1)若守护进程使用锁文件,那么该文件通常存储在/var/run目录中。锁文件的名字通常是name.pid,如cron.pid是

2)若守护进程支持配置选项,那么配置文件通常放在/etc/目录中。配置文件的名字通常是name.conf,其中

    name是该守护进程或服务的名字,如syslogd守护进程的配置文件通常是/etc/syslog.conf

3)守护进程可用命令行启动,但通常他们是系统初始化脚本之一(/etc/rc*或/etc/init.d/*)启动的。如果守护进程

   终止时,应当自动的重启动它,则我们可在/etc/inittab中为该守护进程包括respawn记录项,这样init就将

   重新启动该守护进程

4)若一个守护进程有一个配置文件,那么当该守护进程启动时会读该文件,但在此之后一般就不会再查看它。

   若更改了配置文件,那么守护进程应该重启。为避免这种麻烦,某些守护进程将捕捉SIGHUP信号,当他们

   接收到该信号时,重新读配置文件。因为守护进程并不与终端相结合,他们活是无控制终端的会话首进程,或

   是孤儿进程组中的成员,所以守护进程没有理由期望接收SIGHUP,守护进程可以安全的重复使用SIGHUP

 

 

 

 

 


参考


BSD syslog协议的格式

 

 

 

 

 


UNIX环境高级编程 守护进程




推荐阅读
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 在做以下实验时需先做的操作为:(1)打开两个虚拟机(desktop和server)并更改他们的ipÿ ... [详细]
  • 开发笔记:Python脚本优化Zabbix多行日志监控
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python脚本优化-----Zabbix多行日志监控相关的知识,希望对你有一定的参考价值。通过使用z ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 进入配置文件目录:[rootlinuxidcresin-4.0.]#cdusrlocalresinconf查看都有哪些配置文件:[rootlinuxid ... [详细]
  • UNIX高级环境编程 第11、12章 线程及其属性
    第11章线程11.2线程概念线程资源:线程ID,一组寄存器,栈,调度优先级和策略,信号屏蔽字,e ... [详细]
  • 1.imac睡眠快捷键是啥苹果电脑强制退出程序快捷键是Command+Option+Shift+Esc。苹果电脑 ... [详细]
author-avatar
samiensfe_663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有