OS实验-Shell 程序

OS实验课实验一,仅做学习用,仅供参考,本文记录一些心得
github:https://github.com/LeviningU/LinuxShell-ysh

jobs fg bg ctrl+z ctrl+c ctrl+\ &

进程管理,创建子进程,算是第二次接触多线程(菜)
命令 加个 &,后台运行,输出会在前台显示
jobs:查看进程
fg:将后台进程放到前台运行
ctrl+z:将前台命令暂停
bg:将暂停的进程在后台继续运行
ctrl+c:中止前台进程
ctrl+\:另一种中止(?)未过多了解

管道与重定向

管道命令其实也相当于重定向命令,都是将改变命令的标准输入流和标准输出流
重定向命令
“>”:将标准输出流输出到一个文件中,覆盖原内容
“>>”:将标准输出流输出到一个文件中,追加到原内容后
“<”:将标准输入流更改为一个文件
管道命令
“|”:此符号连接的左右两条命令,左边命令的输出流会输出到右边命令的输入流(当然并不是直接接上)(常用于xxx | grep获取某些命令输出中想要的信息),可以重复接管道。

知道以上两个东东之后就可以玩花活了(bushi cat < main.cpp | cat > main.cpp )古希腊掌控输入输出的神。

信号机制以及带来的问题和个人处理方式

可以为指定的中断设置处理函数,比如前面提到的ctrl+z,ctrl+c中断,
可以捕获该中断自己处理,当然也可以忽略
接收到这些信号时,程序会停下当前语句的执行,去执行信号处理函数,然后从停下的位置的下一条命令(问题的开始,命运的齿轮开始转动)开始执行。这很好对吧,不这不好。
在正常的程序运行中,有两个地方,第一个地方是前台命令执行时,父进程等待子进程时的waitpid,第二个地方是等待用户输入时的getline,当程序在这两个地方等待时,收到中断信号,跑去执行处理函数,回来后,诶,我不等了,我运行后面的去了。
解决这个问题就搞循环,正常等到结果后就退出,被中断的情况就循环继续给爷等。

//waitpid正常返回等待的pid,并且保证ctrl+z或ctrl+c中断(更改cur_pid)正常结束等待
while(waitpid(cur_pid, NULL, 0) != cur_pid && cur_pid != 0);
do
{
    std::cin.clear();
}//getline被中断会返回个啥来着,反正会继续循环
while (!std::getline(std::cin, input));

还有啥,想到再补充

啊哈,这里是小尾巴~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇