栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

一、实验目的

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

二、实验环境:

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

三、实验内容与步骤 PART 1 进程基本操作
  1. 查看当前所有进程。

  2. 查看当前进程树,找出ps进程的父进程是哪个进程。
    ps进程的父进程为bash

    或者通过pstree命令从进程树中找到pstree进程的父进程(由于没有使用ps命令,没有产生ps进程,在使用pstree时找不到ps进程,所以只能找pstree的父进程了)

  3. 查看进程树,在进程树中显示进程ID。

  4. 杀死bash进程,观察结果。

    将bash进程杀死后从管理员切换到了普通用户,如果是普通用户杀死bash进程则退出终端

  5. 在终端窗口,以前台方式启动vi,编辑一个文本文件,文件名自定:vi 文件名

  6. 将vi进程切换到后台。

  7. 分别查看进程列表,工作列表。

  8. 将刚才切换到后台的vi进程切换到前台。

  9. 退出vi。

    在命令模式下输入:q

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

  11. 查看工作列表,是否有find在执行。

  12. 等待find工作结束,查看工作列表,还有find在执行吗

    13.查看result.txt文件的内容。

太多了就只看了前面的10行
(查看全部可以使用cat result.txt 或者 vi result.txt)

PART 2 进程管理
  1. 编写一个C程序,程序名为running.c,主函数中包含一个无法正常终止的循环,如:
    int main(int argc,char **argv)
    {
    printf(“The program is running.n”);
    while (1)
    {
    }
    return 0;
    }

  2. 编写一个C程序,程序名为waitkey.c,主函数中包括一个输入语句,等待用户输入一个数据,代码自己写。

  3. 分别在两个终端窗口,运行上述两个程序,waitkey程序运行到输入数据语句时,暂时不
    输入。

    ./running 执行第一个程序,使用ctrl+T打开另一个终端窗口 ./waitKey执行第二个程序(先使用gcc running -o running进行编译)

  4. 打开第三个终端窗口,用ps命令查看系统中进程,观察上述两个程序的进程状态。

  5. 在waitkey程序运行窗口输入数据,程序结束,在第三个终端窗口用ps命令查看系统中进程。

  6. 在第三个终端窗口,将running程序对应的进程杀掉,再观察系统中进程。

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

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

  1. 用命令查看计划任务表:crontab –l

  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 %sn",asctime(localtime(&t)));               
              fclose(fp);
            }
   }
}

截图太长了,只截取了一部分

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

该函数主要作用是建立一个后台程进程,将/(根目录)设置为默认路径,如果没有test.log文件就创建一个这个文件,并每隔3秒向该文件写入固定格式的程序时间,重复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 : %sn",filename->d_name);//文件名写入
                }
					fprintf(fp,"the number of files:%dn",countOfFiles);//数量写入
               fclose(fp);
                closedir(dp);
             }
        }
        return 0;
}

运行结果截图:


参考资料连接:
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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号