★实验 8-2 1. 创建两个守候进程。每个守候进程各自创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 守候进程 1:未使用的内存大小(MemFree) b) 守
2017-07-16 21:25
686 查看
★实验 8-2 1. 创建两个守候进程。每个守候进程各自创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 守候进程 1:未使用的内存大小(MemFree) b) 守候进程 2:在活跃使用中的缓冲或高速缓冲存储器页面文件的大小(Active) 可以从/proc/meminfo 获取 3. 每隔 2s 通过日志守候进程 syslogd 向系统日志中写入以下内容: a) 进程名称 b) 进程 ID c) 当前时间 #include <unistd.h> #include <signal.h> #include <fcntl.h> #include <sys/syslog.h> #include <sys/param.h> #include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int init_daemon(const char *pname, int facility) { int pid; int i; signal(SIGTTOU,SIG_IGN); signal(SIGTTIN,SIG_IGN); signal(SIGTSTP,SIG_IGN); signal(SIGHUP ,SIG_IGN); if(pid=fork()) exit(EXIT_SUCCESS); else if(pid< 0) { perror("fork"); exit(EXIT_FAILURE); } setsid(); if(pid=fork()) exit(EXIT_SUCCESS); else if(pid< 0) { perror("fork"); exit(EXIT_FAILURE); } for(i=0;i< NOFILE;++i) close(i); open("/dev/null", O_RDONLY); open("/dev/null", O_RDWR); open("/dev/null", O_RDWR); chdir("/tmp"); umask(0); signal(SIGCHLD,SIG_IGN); openlog(pname, LOG_PID, facility); return ; } float get_memfree() { FILE* fp; char buffer[1024]; size_t bytes_read; char* match; float memfree; fp = fopen ("/proc/meminfo", "r"); bytes_read = fread (buffer, 1, sizeof (buffer), fp); fclose (fp); buffer[bytes_read] = '\0'; match = strstr (buffer, "MemFree"); if (match == NULL) return 0; sscanf (match, "MemFree : %f", &memfree); //读取 return memfree; } float get_Active() { FILE* fp1; char buffer1[1024]; size_t bytes_read1; char* match1; float Active; fp1 = fopen ("/proc/meminfo", "r"); bytes_read1 = fread (buffer1, 1, sizeof (buffer1), fp1); fclose (fp1); buffer1[bytes_read1] = '\0'; match1 = strstr (buffer1, "Active"); if (match1 == NULL) return 0; sscanf (match1, "Active : %f", &Active); return Active; } int main(int argc,char *argv[]) { FILE *fp; FILE *fp1; time_t ticks; init_daemon(argv[0],LOG_KERN); while(1) { sleep(2); syslog(LOG_INFO, "PID information, pid=%d", getpid()); syslog(LOG_INFO, "PID information, name=%s",argv[0]); ticks=time(NULL); syslog(LOG_INFO, "%s", asctime(localtime(&ticks))); } while(1) { sleep(1); if((fp=fopen("print_memfree","a")) ==0) { fprintf (fp,"MemFree now is: %4.0f\n", get_memfree ()); fclose(fp); } else if((fp1=fopen("print_Active","a")) >=0) { fprintf (fp1,"Active now is: %4.0f\n", get_Active ()); fclose(fp1); } } return; }
相关文章推荐
- ★实验 8-1 1. 创建一个守候进程。并为自己创建独立的日志文件。 2. 每隔 1s 向日志文件中写入如下信息: a) 未使用的内存大小(MemFree) 可以从/proc/meminf
- linux bash脚本获取系统信息(cpu 总内存 可用内存 文件系统大小 系统位数 进程数 软件包数量 IP地址)
- # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb =>
- 动态创建文本文件并写入数据 避免正由另一进程使用,因此该进程无法访问该文件。的问题
- 小实验:用创建进程()打开计算器,然后关闭进程句柄。再用打开进程(进程ID),使用两次,得到两个进程句柄。实验目的:这两个进程句柄都能控制这个进程吗?通过该试验加深对句柄的理解!!
- 0907使用write函数向共享内存中写入数据,实现不同进程间的数据信息传递
- 程序中查看init.rc文件中给每个进程分配的最大内存使用
- linux c/c++ 编程之-----创建管道文件,并实现两个进程间的信息传递。
- Linux下创建管道文件,并实现两个进程间的信息传递。
- 创建文本后,写入文本,报“正由另一进程使用,因此该进程无法访问该文件”
- 使用Shell向syslog日志文件写入信息
- 使用Apache POI创建Excel,并从数据库中读取数据写入到Excel文件中
- 使用log4j每天创建日志文件
- windows笔记-使用内存映射文件在进程之间共享数据
- log4net 将不同级别的信息写入不同的日志文件
- C# 程序出现错误或异常,将异常信息写入指定日志文件
- 获取linux进程内存使用信息
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- asp.net中当服务器出错时显示指定的错误页面,同时把错误信息写入系统日志文件
- 使用内存映射文件在进程之间共享数据