shlab7&8

目录

一.任务一:

二、任务二

三、所有代码:


一.任务一:

1.比较trace09~10执行不同结果:
①trace09:

先在后台运行myspin 4,然后在前台运行myspin 5,接着休眠2s,发出TSTP信号使得前台进程挂起并成为后台进程,

jobs输出结果

make rtest09和make test09中都有下面的输出,myspin 4仍然在后台运行,myspin 5被stopped

[1] (3448) Running ./myspin 4 &
[2] (3450) Stopped ./myspin 5 

接着bg %2让后台的作业2继续在后台执行,jobs输出结果:

make rtest09中:作业5在后台恢复运行

[1] (3448) Running ./myspin 4 &
[2] (3450) Running ./myspin 5 

make test09中:作业5仍然在后台挂起

[1] (3459) Running ./myspin 4 &
[2] (3461) Stopped ./myspin 5 

 

trace10: 

先在后台运行myspin 4,然后休眠1s,fg %1在前台运行作业1,再休眠1s,发出TSTP信号,前台作业被挂起,放到了后台。jobs输出:

rtest10: myspin 4在后台被挂起

[1] (3482) Stopped ./myspin 4 &

test10: 没有输出(说明后台此时没有作业)

 然后fg %1使得作业1在前台继续运行,jobs输出:

rtest10:无(没有后台进程)

test10:作业1仍然在后台运行,而且在此之前的fg被警告没有对应的命令

[1] (3492) Running ./myspin 4 &

 

2.实现do_bgfg内建函数:

do_bgfg需要实现的功能:

fg  <job>: job是后台运行或者挂起的作业,变为前台的运行作业

bg <job>: job是挂起的后台作业,变为后台的运行作业

代码:

①do_bgfg:

  • 先判断是jid还是pid(根据第一个字母是不是‘%’
  • 根据jid/pid获得进程jod_t对象
  • 调用kill函数向前台进程发送SIGCONT信号
  • 根据"bg"、"fg"判断是否是后台进程,如果是更改进程的状态state为BG
  • 如果不是后台进程,更改状态为FG,然后调用waitfg函数等待前台进程的结束

结果:

二、任务二

验证Trace11~15并解释与记录

trace11:

先调用mysplit 4睡眠四秒,然后SLEEP 2睡眠2秒,接下来INT信号终止前台进程,再调用/bin/ps a显示当前进程的状态


trace12 

先调用mysplit 4睡眠4秒,然后SLEEP 2睡眠2秒,接着发送信号TSTP停止前台进程,然后jobs显示后台进程,最后/bin/ps a显示进程的行程

trace13:

首先调用mysplit 4睡眠4秒,然后SLEEP 2睡眠2秒,接着发送TSTP信号停止前台进程,jobs显示后台进程,/bin/ps a显示进程的行程,fg %1将jid=1的作业调到前台运行,最后/bin/ps a显示进程的行程

trace14:

  • 前三行打印文字,然后调用./bogus指令,然后在后台调用mysplit函数睡眠4秒,再调用fg命令,再调用bg命令
  • 再调用fg a命令,再调用bg a命令,然后调用fg999999命令,然后调用bg999999命令,再调用fg%2命令,将当前在后台的作业二移动到前台,再调用fg%1命令,将当前在后台的作业一移动到前台
  • 然后调用sleep命令睡眠2秒,然后调用TSTP指令打印,再调用bg%2命令,将当前在后台的作业二运行
  • 再调用bg %1命令,将当前在后台的作业一运行,最后调用jobs指令打印当前在后台的作业

 

trace15:

  • 前三行打印文字,然后调用myspin函数睡眠10秒,再调用sleep命令睡眠2秒,再调用INT指令打印
  • 然后在后台调用myspin函数睡眠3秒,再在后台调用myspin函数睡眠4秒,然后调用jobs指令打印当前在后台的作业
  • 然后调用指令fg%1命令,将当前在后台的作业一移动到前台,再调用sleep指令睡眠2秒,然后调用TSTP指令打印
  • 然后调用jobs指令打印当前在后台的作业,再调用bg%3命令,将当前在后台的作业三运行,再调用bg%1命令,将当前在后台的作业一运行
  • 然后调用jobs指令打印当前在后台的作业,然后调用指令fg%1命令,将当前在后台的作业一移动到前台,最后调用quit指令退出

三、所有代码:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值