关于的Linux进程管理实践

【实验目的】

熟悉Linux进程管理方法,掌握进程查看命令、进程终止命令,能使用at和cron服务实现Linux进程调度。

【实验内容】

1. 学习常用的进程管理命令;
2. 熟悉Linux中查看进程及进程相关属性、终止进程的方法;
3. 掌握使用at和cron服务启动进程的方法。

【实验准备】

1. 熟悉Linux常用命令以及ubuntu终端操作方法;
2. 熟悉vim等工具的安装和使用。

【实验报告要求】

1.	掌握进程管理中ps、top、kill、killall、jobs、fg、bg等常用命令的用法;
2.	通过命令或编写shell脚本用cron实现对进程的自动启动。

【实验步骤】

一. 熟悉ps、top、kill、killall、jobs、fg、bg这7个命令的用法,完成下面的练习:

1.	启动cat命令并使它在后台运行;
Ctrl+z使进程挂起:

在这里插入图片描述
使其在后台运行:
在这里插入图片描述
2. 查找所有用户所有进程中包含字符“cat”的进程;
在这里插入图片描述
3. 终止名为“cat”的进程,并查看验证是否还存在此进程;
在这里插入图片描述
验证,不存在[1]cat进程:
在这里插入图片描述
4. 动态显示进程占用cpu及mem的情况,然后【ctrl+c】结束该进程;
在这里插入图片描述
5. 运行top命令,按【ctrl+z】挂起该进程;
在这里插入图片描述
6. 查看所有后台进程;
在这里插入图片描述
7. 将top命令切换到后台运行;
在这里插入图片描述
8. 将top命令切换到前台执行。
在这里插入图片描述
在这里插入图片描述

二. 掌握通过at命令实现计划任务,学习下面at命令的用法,完成相关练习:
要求:分别在5分钟后和3天后统计/etc/passwd文件的行数,将统计结果以追加的方式写入$HOME/passwd文件中;
在这里插入图片描述
在这里插入图片描述
三. 通过cron进程实现计划任务,学习下面crontab命令的用法,完成相关练习:
从以下网站:完成以下问题:
1.cron、cornd、crontab三者各自的含义是什么,他们之间的关系是什么?
答:
crond的概念和crontab是不可分割的。crontab是一个命令,常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。而crond正是它的守护进程。(来源Wikipedia)
Linux中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。(来源网络)

crondtab是一个命令,我们设置的周期性的固定命令是存放在crontab文件中的。
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程。
cron是一种liunx周期性执行设置好时间的固定任务的一种机制。

2.完成上述网站中的例子;
答:
crontab -l //列出当前的所有调度任务
crontab -l -u jp //列出用户jp的所有调度任务
在这里插入图片描述
实例:
在当前家目录下创建shell脚本exp5.sh(实现排序)如下:
在这里插入图片描述
输入crontab -e 添加计划任务:
在这里插入图片描述
在文本最后输入我们要执行的shell脚本命令:
在这里插入图片描述
重启cron服务:
#service cron restart
在这里插入图片描述

查看结果,用户家目录下查看任务有没有执行,如果执行了应该是有pa.txt文件的(任务有重定向到文件):

在这里插入图片描述
在这里插入图片描述
3.利用corn机制,完成服务器定时发送到你自己的手机上。请参考下面网页:https://www.jianshu.com/p/7baf423c0579(Python爬虫小白入门(二)--服务器定时发送给邮件给你)
答:
已开启SMTP:
在这里插入图片描述
我的mail.py爬虫文件:
在这里插入图片描述
写cron脚本文件,命名为crontest.cron。表示,每隔一小时,执行一次爬虫命令 ,并且定向日志为mail.txt:
在这里插入图片描述
脚本文件内容:
在这里插入图片描述
添加定时任务。执行命令(在此之前先新建一个bs.log存放命令日志):
在这里插入图片描述
执行crontab -l查看是否成功添加任务:
在这里插入图片描述

等待8小时就有邮件发送到邮箱了~!

四. 附件中“1t_fork.c”和“2t_fork.c”是两个很短的源码文件,根据教材P206~208或者网络资料学习fork函数的原理,完成下面的问题:

  1. 分析1t_fork.c文件中将输出几个“_”,为什么;
    答:
    在这里插入图片描述
    分析会出现6个“_”,但实际出现了8个“_”。
    运行结果截图:
    在这里插入图片描述
    在这里插入图片描述
    但若是这样:
    在这里插入图片描述
    则只会出现6个“_”:
    在这里插入图片描述
    原因在于:printf遇到\n就会输出,并不会在缓冲区停留。所以当printf(“_ \n”)时,当i=0时候,fork后的父进程和子进程即刻输出“_”。随后i=1的时候,fork后的父进程的子进程和父进程拷贝i=0时候的父进程的数据结构和地址空间,同理i=0时候fork的子进程的i=1 fork的父进程和子进程。i=2循环结束,输出结果,所以会输出6个“_”。
    当printf(“_”)这种情况时候,i=0时,fork后形成父进程和子进程,此时父进程和子进程的缓冲区内均有“_”。继续循环,i=1,此时i=0时候的父进程和子进程分别再一次fork形成各自的子进程和父进程。它们各自的子进程和父进程将会拷贝一份i=0时的子进程和父进程的缓冲区内容,数据结构,地址空间等。那么,意味着,子进程和父进程的各自子进程和父进程均需要打印两次“_”。此时i=2,循环结束,打印结果,为8个“_”。Wait()函数回收子进程和父进程,避免形成僵尸进程。
  2. 分析2t_fork.c文件中将输出几个“?”,为什么;
    答:
    在这里插入图片描述
    出了个9个“?”。
    在这里插入图片描述
    原因分析:第一次Fork以后,生成了父进程和子进程,继续往下执行。因为没有判别条件,操作系统随机分配资源,父进程和子进程将随机执行语句命令,来进行fork新的子进程和父进程。然后执行printf语句,输出缓冲区内全部的“?”。

五. 附件“实验六.zip”中是教材7.1和7.2节中的源码,请大家在自己机器上编译运行,通过学习教材上对相关函数的描述,思考其输出结果。
答:
1.
在这里插入图片描述
函数说明:execl()用来执行参数path 字符串所代表的文件路径, 接下来的参数代表执行该文件时传递过去的argv(0), argv[1], …, 最后一个参数必须用空指针(NULL)作结束。返回值:如果执行成功则函数不会返回, 执行失败则直接返回-1, 失败原因存于errno 中。

在这里插入图片描述
在这里插入图片描述
打印所有用户当前状态下的进程快照。
2.
在这里插入图片描述
execle表示,将环境变量传递给需要替换的进程。
在这里插入图片描述

Execlp函数,表示第一个参数path不用输入完整路径,只有给出命令名即可,它会在环境变量PATH当中查找命令。
在这里插入图片描述
在这里插入图片描述
4.
在这里插入图片描述
Execve函数将环境变量传递给需要替换的进程。
执行截图:
在这里插入图片描述
5.
Fork函数的三种返回情况,为0则是创建了子进程,打印子进程的PID和返回值。若是为-1则是未能成功创建子进程,fork失败。若是返回值大于零,则代表父进程,返回值为子进程的PID。
在这里插入图片描述
在这里插入图片描述
6.

在这里插入图片描述
Getpid()函数,获得当前进程的PID和当前进程的父进程的ID即PPID。
运行:
在这里插入图片描述

【实验总结】

实验过程中碰到的具体问题,怎么解决的?通过这次实验掌握了什么?
答:
通过上网查资料,自己的思考。
https://blog.csdn.net/Lyt15829797751/article/details/78056264 //fork函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值