您的位置:首页 > 其它

★实验 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐