Linux第三次实验---进程管理

文章目录

    • 一、实验目的
    • 二、实验环境:
    • 三、实验内容与步骤
      • PART 1 进程基本操作
      • PART 2 进程管理
      • PART 3 定时执行命令
      • PART 4 守护进程

一、实验目的

1、熟悉Linux操作系统环境,掌握Linux命令的一般格式;
2、掌握进程的概念,进程及作业相关的操作命令;
3、掌握查看系统信息的方法。

二、实验环境:

一台运行GNOME图形用户界面的任意一种Linux操作系统的计算机。(Centos7)

三、实验内容与步骤

PART 1 进程基本操作

  1. 查看当前所有进程。
    Linux第三次实验---进程管理_第1张图片

  2. 查看当前进程树,找出ps进程的父进程是哪个进程。
    ps进程的父进程为bash
    Linux第三次实验---进程管理_第2张图片
    或者通过pstree命令从进程树中找到pstree进程的父进程(由于没有使用ps命令,没有产生ps进程,在使用pstree时找不到ps进程,所以只能找pstree的父进程了)
    在这里插入图片描述

  3. 查看进程树,在进程树中显示进程ID。
    Linux第三次实验---进程管理_第3张图片

  4. 杀死bash进程,观察结果。
    在这里插入图片描述
    将bash进程杀死后从管理员切换到了普通用户,如果是普通用户杀死bash进程则退出终端

  5. 在终端窗口,以前台方式启动vi,编辑一个文本文件,文件名自定:vi 文件名
    在这里插入图片描述

  6. 将vi进程切换到后台。
    在这里插入图片描述

  7. 分别查看进程列表,工作列表。
    Linux第三次实验---进程管理_第4张图片

  8. 将刚才切换到后台的vi进程切换到前台。 Linux第三次实验---进程管理_第5张图片

  9. 退出vi。
    Linux第三次实验---进程管理_第6张图片
    在命令模式下输入:q

  10. 在后台查找根目录下所有比/etc/man_db.conf新的文件,并将结果存储到result.txt中。
    在这里插入图片描述

  11. 查看工作列表,是否有find在执行。
    在这里插入图片描述

  12. 等待find工作结束,查看工作列表,还有find在执行吗
    Linux第三次实验---进程管理_第7张图片
    13.查看result.txt文件的内容。

太多了就只看了前面的10行
(查看全部可以使用cat result.txt 或者 vi result.txt)
Linux第三次实验---进程管理_第8张图片

PART 2 进程管理

  1. 编写一个C程序,程序名为running.c,主函数中包含一个无法正常终止的循环,如:
    int main(int argc,char **argv)
    {
    printf(“The program is running.\n”);
    while (1)
    {
    }
    return 0;
    }
    Linux第三次实验---进程管理_第9张图片

  2. 编写一个C程序,程序名为waitkey.c,主函数中包括一个输入语句,等待用户输入一个数据,代码自己写。
    Linux第三次实验---进程管理_第10张图片

  3. 分别在两个终端窗口,运行上述两个程序,waitkey程序运行到输入数据语句时,暂时不
    输入。
    Linux第三次实验---进程管理_第11张图片
    ./running 执行第一个程序,使用ctrl+T打开另一个终端窗口 ./waitKey执行第二个程序(先使用gcc running -o running进行编译)

  4. 打开第三个终端窗口,用ps命令查看系统中进程,观察上述两个程序的进程状态。
    Linux第三次实验---进程管理_第12张图片

  5. 在waitkey程序运行窗口输入数据,程序结束,在第三个终端窗口用ps命令查看系统中进程。
    Linux第三次实验---进程管理_第13张图片

  6. 在第三个终端窗口,将running程序对应的进程杀掉,再观察系统中进程。
    Linux第三次实验---进程管理_第14张图片

PART 3 定时执行命令

  1. 在指定时间(自己设定,如下午17:00,上午10:00等),找出系统中所有以.c为后缀的文件,将结果保存至/etc/information.txt文件中,并向某用户(自己指定)发信息告知已完成上述工作,信息内容自定。
    Linux第三次实验---进程管理_第15张图片
  2. 启动crond服务:service crond restart
    Linux第三次实验---进程管理_第16张图片
  3. 建立一个cron作业列表文件,文件名为cronfile_1,内容如下:
    33 10 * * * ls /etc
    34 10 * * * who
    35 10 * * * ps
    说明:前两列对应的为时间,分,小时,为便于观察实验结果,可以根据自己的实际实验时间进行调整,。上述文件内容表示10点33分执行命令ls /etc,10点34分执行命令who,10点35分执行命令ps

Linux第三次实验---进程管理_第17张图片

  1. 安装crontab文件,命令为:crontab cronfile_1
    (这里我的文件名是cronWork)

在这里插入图片描述

  1. 用命令查看计划任务表:crontab –l
    Linux第三次实验---进程管理_第18张图片

  2. 计划列表中的任务是以前台方式还是后台方式运行

cron是一个守护进程,是个标准的后台服务程序

  1. 当收到邮件通知时,查看邮件信息

由于当时没有设定发送用户,又是在root下运行,邮件都发给了root用户,我没有收到邮件提示,主动到root的邮箱进行查看:
在这里插入图片描述
(查看root的邮件方式:①使用su - 进入root账号和环境,输入mail查看;②进入邮箱目录:cd /var/spool/mail 在这里可以看到所有用户的邮箱(应该是),然后可以cat root就可以看到他的所有信息,但是如果信息很多就可能看不过来;③在上个条件下,进入到mail目录,使用命令mail -f root(指定邮箱名)可以查看到root的邮箱内容(推荐第三种))

PART 4 守护进程

  1. 在自己的工作目录下,建立一个c源文件,文件名自定,如daemon.c
    文件内容如下:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int init_daemon(void)
{
   pid_t pid;
   int i;
   signal(SIGTTOU,SIG_IGN);
   signal(SIGTTIN,SIG_IGN);
   signal(SIGTSTP,SIG_IGN);
   signal(SIGHUP,SIG_IGN);    
   umask(0);
   if((pid=fork())>0)
   	exit(EXIT_SUCCESS);
   else if(pid<0)
   {
   	perror("fork");
   	exit(EXIT_FAILURE);
   }
   setsid();	
   for(i=0;i=0)
            { t=time(0);
              fprintf(fp,"Im here at %s\n",asctime(localtime(&t)));               
              fclose(fp);
            }
   }
}

截图太长了,只截取了一部分
Linux第三次实验---进程管理_第19张图片

  1. 阅读以上程序,读懂代码,观察运行结果。

该函数主要作用是建立一个后台程进程,将/(根目录)设置为默认路径,如果没有test.log文件就创建一个这个文件,并每隔3秒向该文件写入固定格式的程序时间,重复20次。

运行结果:
Linux第三次实验---进程管理_第20张图片

  1. 将以上程序主函数进行修改,功能为:在\tmp目录下建立一个文件,文件名为data.txt,对指定目录下的文件进行统计(指定目录可以在程序中直接给出),每隔2分钟,将指定目录下的文件数量写入文件data.txt中,写3次。
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int init_daemon(void)
{
        pid_t pid;
        int i;
        signal(SIGTTOU,SIG_IGN);
        signal(SIGTTIN,SIG_IGN);
        signal(SIGTSTP,SIG_IGN);
        signal(SIGHUP,SIG_IGN);
        umask(0);
        if((pid=fork())>0)//是父进程,结束父进程,子进程继续,为避免挂起控制终端将Daemon放入后台执行
                exit(EXIT_SUCCESS);
        else if(pid<0)
        {
                perror("fork");
                exit(EXIT_FAILURE);
        }
        setsid();       
        for(i=0;i=0)
             {
                dp = opendir("/home/student");	//指定读取的目录
                if(!dp){		//目录打开异常输出
                        fprintf(fp,"open dir error!\n");
                }
                while(filename = readdir(dp)){	//读取该目录下的所有文件
                        fprintf(fp,"files : %s\n",filename->d_name);//文件名写入
                }
					fprintf(fp,"the number of files:%d\n",countOfFiles);//数量写入
               fclose(fp);
                closedir(dp);
             }
        }
        return 0;
}

运行结果截图:

Linux第三次实验---进程管理_第21张图片
参考资料连接:
https://blog.csdn.net/dream_allday/article/details/75243818
http://c.biancheng.net/cpp/html/238.html
https://blog.csdn.net/vblittleboy/article/details/8593067
https://www.runoob.com/cprogramming/c-function-signal.html
https://blog.csdn.net/zhuyi2654715/article/details/7540759
https://www.runoob.com/w3cnote/c-time-func-summary.html
https://www.runoob.com/cprogramming/c-function-fprintf.html

你可能感兴趣的:(linux,centos)