`
haoningabc
  • 浏览: 1465914 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

bsd进程记账

c 
阅读更多
参考 http://blog.chinaunix.net/uid-26822401-id-3153147.html

似乎跟信号那有关系

记账记录的结构体定义在<sys/acct.h>头文件里,并看起来像:

typedef u_short comp_t;  /* 3-bit base 8 exponent; 13-bit fraction */
struct acct
{
  char ac_flag;  /* flag (see following Figure) */
  char ac_stat;  /* termination status (signal & core flag only) */ /* Solaris Only */
  uid_t ac_uid;  /* real user ID */
  gid_t ac_gid;  /*real group ID */
  dev_t ac_tty;  /* controlling terminal */
  time_t ac_btime; /* starting calendar time */
  comp_t ac_utime;  /* user CPU time (clock ticks) */
  comp_t ac_stime;  /* system CPU time (clock ticks) */
  comp_t ac_etime;  /* elapsed time (clock ticks) */
  comp_t ac_mem;  /* average memory usage */
  comp_t ac_io;  /* bytes transfered (by read and write) */ /* "blocks on BSD systems */
  comp_t ac_rw;  /* blocks read or written */  /* (not present on BSD systems) */
  char ac_comm[8];  /* command name: [8] for Solaris, [10] for Mac OS X, [16] for FreeBSD, and [17] for Linux */
}; 


#include <unistd.h>
#include <signal.h>

int
main(void)
{
    pid_t pid;

    if ((pid = fork()) < 0) {
        printf("fork error\n");
        exit(1);
    } else if (pid != 0) { /* parent */
        sleep(2);
        exit(2); /* terminate with exit status 2 */
    }
                        /* first child */
    if ((pid = fork()) < 0) {
        printf("fork error\n");
        exit(1);
    } else if (pid != 0) {
        sleep(4);
        abort(); /* terminate with core dump */
    }

                        /* second child */
    if ((pid = fork()) < 0) {
        printf("fork error\n");
        exit(1);
    } else if (pid != 0) {
        execl("/bin/dd", "dd", "if=/etc/termcap", "of=/dev/null", NULL);
        exit(7); /* shouldn't get here */
    }

                        /* third child */
    if ((pid = fork()) < 0) {
        printf("fork error\n");
        exit(1);
    } else if (pid != 0) {
        sleep(8);
        exit(0); /* normal exit */
    }

                        /* fourth child */
    sleep(6);
    kill(getpid(), SIGKILL); /* terminate w/signal, no core dump */
    exit(6); /* shouldn't get here */
}


#include <sys/acct.h>
#include <unistd.h>
#include <stdio.h>

#ifdef HAS_SA_STAT
#define FMT "%-*.*s e = %6ld, chars = %7ld, stat = %3u: %c %c %c %c\n"
#else
#define FMT "%-*.*s e = %6ld, chars = %7ld, %c %c %c %c\n"
#endif
#ifndef HAS_ACORE
#define ACORE 0
#endif
#ifndef HAS_AXSIG
#define AXSIG 0
#endif

static unsigned long
compt2ulong(comp_t comptime) /* convert comp_t to unsigend long */
{
    unsigned long val;
    int exp;

    val = comptime & 0x1fff; /* 13-bit fraction */
    exp = (comptime >> 13) & 7; /* 3-bit exponent (0-7) */
    while (exp-- > 0)
        val *= 8;
    return(val);
}
int
main(int argc, char *argv[])
{
    struct acct acdata;
    FILE *fp;

    if (argc != 2) {
        printf("usage: parcct filename\n");
        exit(1);
    }
    if ((fp = fopen(argv[1], "r")) == NULL) {
        printf("can't open %s\n", argv[1]);
        exit(1);
    }
    while (fread(&acdata, sizeof(acdata), 1, fp) == 1) {
        printf(FMT, (int)sizeof(acdata.ac_comm),
            (int)sizeof(acdata.ac_comm), acdata.ac_comm,
            compt2ulong(acdata.ac_etime), compt2ulong(acdata.ac_io),
#ifdef HAS_SA_STAT
            (unsigned char) acdata.ac_stat,
#endif
            acdata.ac_flag & ACORE ? 'D' : ' ',
            acdata.ac_flag & AXSIG ? 'X' : ' ',
            acdata.ac_flag & AFORK ? 'F' : ' ',
            acdata.ac_flag & ASU ? 'S' : ' ');
    }
    if (ferror(fp)) {
        printf("read error\n");
        exit(1);
    }
    exit(0);
}
分享到:
评论

相关推荐

    linux内核配置make-menuconfig菜单详解.doc

    该选项用于启用 BSD 进程记账,它将进程信息写入文件中,包括进程的创建时间、创建者、内存占用等信息。 6. Auditing support 该选项用于启用审计支持,用于和内核的某些子模块同时工作,例如 Security Enhanced ...

    Linux内核配置选项.pdf

    另外,BSD进程记账(BSD Process Accounting)能够通知内核记录程序执行时的统计数据,并将其写入文件中。 系统调用控制支持(Sysctl support)选项允许在不重新编译内核或重启系统的情况下动态更改内核参数和变量...

    Linux_kernel_3.6.4编译操作文档

    例如,启用交换分区的支持(Support for paging of anonymous memory (swap)),启用SystemV IPC(进程间通信机制),启用POSIX消息队列(POSIX Message Queues),以及是否启用BSD进程记账(BSD Process Accounting...

    BSD68,BSD100.rar

    BSD68和BSD100是两个在计算机视觉和图像处理领域中广泛使用的数据集,尤其在深度学习的训练和评估中占据重要地位。这两个数据集由加利福尼亚大学伯克利分校的研究人员创建,因此通常被称为Berkeley Segmentation ...

    The Design and Implementation of the 4.4 BSD Operating System

    在操作系统的设计概述中,文档详细介绍了4.4 BSD系统设施和内核的相关内容,包括内核的组织、内核服务、进程管理、信号处理、进程组和会话等。内存管理作为操作系统的核心部分,4.4 BSD采取的设计决策和内核内部的...

    BSD500数据集

    BSD500数据集是计算机视觉领域中一个重要的资源,主要关注图像分割和轮廓提取的任务。这个数据集包含了丰富的信息,对于研究和开发图像处理算法,尤其是语义分割技术,有着不可忽视的价值。 首先,我们要理解什么是...

    An introduction to 4.3 BSD interprocess communication tutorial

    ### 4.4 BSD进程间通信教程简介 #### 摘要 伯克利 UNIX 4.4 BSD 版本提供了多种进程间通信(IPC)的选择。为了帮助程序员开发由协同进程组成的程序,本文档讨论了不同的 IPC 选项,并通过一系列示例程序展示了这些...

    BSD68 用于图像去噪算法的测试图片

    BSD68是一个专门用于图像去噪算法评估的图片数据集,它包含68张具有不同特性的灰度图像。这个数据集在图像处理领域中扮演着重要的角色,因为准确评估去噪算法的效果对于算法的开发和优化至关重要。下面将详细讨论...

    iPhone网络通讯之BSD Socket篇

    BSD套接字是网络编程中使用的一套API,用于实现进程间的通信(IPC),也可以用于网络通讯。尽管iPhone提供了CFSocket这样的网络编程接口,但作者孙东风偏好使用更为通用的BSD Socket。BSD Socket编程在iPhone开发中...

    4.4BSD Lite

    1. **改进的进程调度**:引入了多级反馈队列调度算法,提高了系统的响应时间和整体效率。 2. **文件系统增强**:支持软链接和硬链接,增强了文件系统的灵活性和可靠性。 3. **设备驱动程序**:提供了广泛的硬件支持...

    Design.And.Implementation.Of.The.4.4.Bsd.Operating.System.-.Part.2.pdf

    《4.4 BSD操作系统的设计与实现》第二部分深入探讨了操作系统内核的关键概念和技术,特别是对进程管理和系统调用处理的细节进行了详尽的解析。本文将基于该文档的标题、描述、标签以及部分内容,提炼并扩展其核心...

    4.4BSD-Lite

    《深入解析4.4BSD-Lite:TCP/IP协议栈的核心技术》 4.4BSD-Lite,这是一个在计算机科学领域中具有深远影响力的操作系统版本,它以其先进的网络功能,特别是TCP/IP协议栈的设计与实现,成为了研究和开发网络系统的...

    4.4BSD操作系统设计与实现

    5. **进程间通信(IPC)**:4.4BSD提供了丰富的进程间通信机制,如管道、信号量、消息队列和套接字等,这些都是现代操作系统中不可或缺的部分。 6. **设备驱动**:书中会讲解如何编写和管理设备驱动程序,使得操作...

    bsd rc.d 介绍

    ### BSD rc.d系统详解 #### 引言:从单一到模块化 在深入探讨之前,让我们先了解一下**rc.d**系统的基本概念。在NetBSD 1.5版本中,传统上由一个大型的、单一的`/etc/rc`启动脚本负责所有服务和守护进程的启动任务...

    86BSD代码.rar

    86BSD是一个基于UNIX操作系统的变体,专为Intel x86架构设计。在这个名为"86BSD代码.rar"的压缩包中,我们主要关注的是86BSD系统下的压力传感器IIC驱动代码以及相关的说明文档。这个压缩包的资源对于理解和开发基于...

    DESIGNING BSD Rootkits,pdf

    从给定的文件信息来看,我们探讨的主题是《设计BSD Rootkits》这本书,它由Joseph Kong撰写,由译者sniper翻译成中文,并在ChinaUnix的BSD版块上发布。这本书主要介绍了在BSD系统中设计Rootkits的技术和方法,对于...

    BSD4.4设计手册.7z

    The Design and Implementation of the 4.4BSD Operating System Marshall Kirk McKusick Keith Bostic Michael J. Karels John S. Quarterman Copyright © 1996 Addison-Wesley Longman, Inc The second ...

    4.4BSD-lite.tar.gz

    例如,`sys/net`目录下的文件涉及网络子系统的实现,`usr.sbin/routed`可能是路由守护进程的源代码,`usr.bin/ftp`则包含了FTP客户端的实现。 总而言之,《4.4BSD-lite.tar.gz》是网络技术爱好者和专业开发者的宝贵...

    数字图像处理数据集(一)-BSD68

    在这个特定的场景中,我们关注的是"数字图像处理数据集(一)-BSD68"。 BSD68数据集是一个广泛用于图像处理和计算机视觉研究的经典数据集合,尤其在图像分割、去噪、增强等任务中。这个数据集包含了68张不同尺寸的...

Global site tag (gtag.js) - Google Analytics