字节一面,操作系统这题没答好,可惜了
问题引入:
在曾经我们学习Linux的经历中,我们也是多次使用信号的。比如:当我们在使用xshell时,在命令行中按Ctrl+c,这个键盘输入产生了一个硬件中断,被操作系统获取,解释成信号,发送给目标前台进程。前台进程因为收到了信号,进而引起进程退出。
注意:Ctrl+C 产生的信号只能发给前台进程。一个命令后面加个&可以放到后台运行,这样Shell不必等待进程结束就可以接受新的命令,启动新的进程。Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像Ctrl+C这样控制键产生的信号。前台进程在运行过程中用户随时可能按下Ctrl+C而产生一个信号,也就是说该进程的用户空间代码执行到任何地方都有可能收到SIGINT信号而终止,所以信号相对于进程的控制流程来说是异步(Asynchronous)的。 将进程设置为后台进程./进程名 &
查看后台进程并将后台进程提至前台
我们发现进程一旦被设置成为后台进程是无法杀掉的,此时在一直死循环的打印hello myproc.那么我们怎么杀掉这个进程呢?有一种方法是将后台进程设置成为前台进程,再使用ctrl +c 关闭。这种方法也比较好理解。因此哦我们在此处将使用这种方法关闭后台进程。
首先我们要查看此时都有什么任务在执行,我们可以输入 jobs 来查看当前任务列表
其次我们将这个进程提至提至前台,使用 fg 1 ,其中1是任务编号,也就是 [ ]+ 中的数字,注意fg 和 1之间需要带空格。
将前台进程设置为后台进程
我们刚刚知道了将后台进程提至前台使用 fg 任务号,f是front的意思。因此我们如果想把前台进程设置为后台进程,可以使用bg 任务号,我们可以来测试一下
1.信号的概念
信号是进程之间事件异步通知的一种方式,属于软中断。 2.查看信号列表
使用kill -l 命令可以查看系统定义的信号列表
每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如定义 #define SIGINT 2 编号34以上的是实时信号。在此我们只讨论编号34以下的信号,不讨论实时信号。这些信号各自在什么条件下产生默认动作是什么,在signal(7)中都有详细说明:man 7 signal 3.信号处理的常见方式
由于信号产生时是异步的,当产生信号的时候,对应的进程可能正在做着更重要的事情,因此这个进程可以暂时不处理这个信号!进程正在做着更重要的事情说明进程可能不需要理解处理这个信号!但是不代表这个信号不会被处理。进程是一定要记住这个信号已经来了(信号有吗?什么信号?)。因此信号处理的常见方式有以下三种: 忽略此信号 执行该信号的默认处理动作 提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式成为捕捉信号(Catch)。 4.信号的产生
我们在前面提到了我们现在只谈论1-31号信号。那么进程要处理一个信号,肯定是先描述,再组织。那么进程是如何记住这个信号的呢?当然是保存在进程的PCB中。由于我们只考虑1-31号进程,因此在进程的tast_struct中有一个uint32_t sig来表示信号。这里使用了位图的思想。什么信号产生我们使用的是比特位的位置。那么怎么判断有没有比特位的产生我们通过比特位的内容,1表示产生,0表示没有产生。因此一个uint_32足以表示1-31个信号了。
而tast_struct是内核的数据结构,因此只有操作系统有权利获得进程的所有属性。所以进程的整个生命周期,无论信号怎么产生,只能是操作系统帮我们进行信号的设置。 用户层产生信号的方式通过终端按键产生信号
产生信号的第一种方式是通过终端按键产生信号,也就是键盘。系统也为我们提供了一个signal函数,可以捕捉我们产生的信号,接下来我们将使用signal这个函数验证以下终端按键是可以产生信号的。
SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump.现在我们可以来验证以下。
我们可以使用函数产生信号。我们可以使用signal函数向进程发送信号。
其中handler是函数指针(回调方法),是可以让我们用户自定义处理信号的接口(处理信号的第三种方式)
我们在C++代码中看看如何使用signal函数,在下面这段代码中,我们设置了如果进程接受到了SIGINT信号,就会调用handler函数从而输出指定内容。我们都是SIGINT是2号信号,键盘上按Ctrl +C 本质就是给前台进程发送2号信号,因此当进程跑起来的时候,我们按Ctrl + C时,程序会调用hanlder方法打印指定内容,我们来看看结果吧。 #include #include #include using namespace std; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "< #include #include using namespace std; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "< #include #include #include #include #include using namespace std; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "<(atoi(argv[2])),atoi(argv[1])) == -1) { cerr<<"kill :" < #include #include #include #include #include using namespace std; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "< #include #include #include #include #include #include using namespace std; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "< #include #include #include #include #include #include using namespace std; int main(int argc,char* argv[]) { alarm(3);//3秒后alarm int cnt = 0; while(true) { cout<< "我是一个进程 cnt : "< #include #include #include #include #include #include using namespace std; int cnt = 0; void handler(int signo) { cout<<"我是一个进程,刚刚获取了一个信号,信号编号是: "<
人工智能,为科研注入智慧动能(科技自立自强)来源人民日报既带来新的研究方法,也助力经济高质量发展人工智能,为科研注入智慧动能(科技自立自强)核心阅读日前,科技部等六部门发文,着力打造若干重大场景,拓展人工智能应用,高水平科研
丰田在2030年之前不会推出电动GR车型日前据外媒报道称,丰田在2030年之前不会推出电动的GR车型。丰田认为,在碳中和的道路上,也必须有一个混合动力系统,让用户来选择什么是最适合他们的,特别是很多充电设施不发达的地方。
欧洲销量最高的中国电动车一个月卖出超1500辆,比亚迪只排第三曾经不止一次地说过,新能源汽车是中国汽车工业实现换道超车赶超西方汽车工业的最佳机遇,幸运的是,中国已经成功把握住了机会,在新能源汽车市场形成了强大的优势。用一组数据来印证中国新能源
晶圆代工ARVR等行业未来走向如何?2023年集邦拓墣科技产业大预测发布智通财经APP获悉,TrendForce集邦咨询公告2023年集邦拓墣科技产业大预测。其中,TrendForce集邦咨询预估,2023年全球晶圆代工8吋年均产能增幅约312吋约年增
共享版老头乐来咯!法国推出一人座共享电动车自共享单车出现在大众生活中,城市上下班路上多了许多踩踏单车的身影,民众更多选择骑车出行,作为短距离或通勤的最佳选择,不仅经济实惠,而且绿色低碳,到疫情期间国外也掀起共享热潮,不过更
华为进军NAS领域相比之下极空间Q2性价比更高近日,华为集团正式进军NAS领域,其推出的家庭存储私有云产品,依托华为自研的鸿蒙系统,力图在其产品链条上再增加一员大将。NAS领域显然是一片蓝海市场,华为等大厂已经逐渐聚焦这里,就
医药史诗级大反攻,下周关注什么?今天的反弹大涨在预料之中。直播间早评消息的时候就点评了,今天还会延续反弹。但为啥很多人还是害怕入场呢?现在为啥大家涨一点就害怕会下跌,犹豫不决呢?因为A股股民被伤害的已经不相信有光
如何赞美别人?看高情商的人,是如何做的我们在私聊时经常遇到需要我们去夸的人,却不知道怎么开口,反而会显得自己很尴尬。坦释空总结了以下经验,无论在生活中还是在工作中都可以帮助我们高情商地赞美别人。1,赞美一定要真诚至上,
最近想到的一些话1hr越来越觉得,脑子是个日用品,不要把它当成装饰品。2hr哪怕你是对的,也不用非要证明别人是错的。争口舌之快,不是明智之举。3hr遇见奇葩,离得越远越好。因为奇葩的世界观和下限是
奋发图强的意义现在的年轻人动不动就躺平,不想努力奋斗,如果人人都不努力,都想躺平,国家怎么办,这还不算,还有的去追星,请问,国家处于危难处于灭亡的时候,这些你喜欢的明星会来拯救你吗?你会狡辩的说
希望这篇感想能唤醒刚进入大学正在迷茫和摆烂的你我发现大学的生活就是在引导我们形成自律的生活习惯,包括从吃到睡到行再到学的自律。先说吃,大学的食堂不再是像高中那样准时准点供饭,只要你想吃,几乎就是饭来张口的程度,然而你一旦放纵了
越长大越孤单随着年龄的增长,似乎越来越喜欢繁花似锦觅安宁,淡云流水度此生的生活。也没有太多原因,只是在人生这段旅程中,走得越远,发现与别人越不相合。每个人按自己的模式生活久了,发现别人与之不同
正式签约!广东宏远签下新外援,场均22分16篮板,朱芳雨发力了北京时间11月7日,在今年夏天,不少CBA球队都进行了大调整,重新调整球队阵容,甚至有些球队投入了大量资金,不过随着新赛季的开始,很多球队阵容都开始暴露问题,尤其是外援问题,因此随
34分32分39分,客场6连败!库里难挑千斤担,卫冕冠军别再任性新赛季,新格局,新的征程意味着新的机遇与挑战。勇士快船76人雄鹿绿军等豪门球队都是争冠大热门,阵容实力和深度都不容小觑。截至目前,雄鹿队佛挡杀佛神挡杀神,孤独求败,豪取9连胜快船7
联通物联网卡为什么会锁卡?原因你知道吗?物联网卡也就是物联卡,这也是电话卡的一种,但与其它电话卡不同,物联网卡不是用于手机当中的,而是用于各种需要联网的设备当中,而用于手机当中容易出现锁卡等情况。但物联网卡因为与流量卡一
双十一手机怎么选?这几款不错,价格合适配置还高一年一度的双十一快到了,很多人都会在这个日子里选择购买一款适合自己的手机,虽说是要买,但是很多人都会纠结,究竟应该买哪款手机好,而不同的机型都有着不同的特点,笔者接下来就给大家盘点
王者荣耀世界代号破晓新消息将至!王者IP新游10号首发王者荣耀迎来7周年后近期也是看点和动作频频,官方在游戏中也是放出了共创之夜的系列活动预告,11月12日共创之夜直播即将到来。根据官方预告,王者荣耀将于11月11日官宣王者荣耀世界的
行业动态天逸创新赋能国民家庭娱乐,引领中国好声音随着第十一季中国好声音的学员梁玉莹获得年度总冠军,今年的节目也圆满落下帷幕。天逸音响携手IPTV强势登陆中国好声音2022,一路以见证者的身份,助力好声音。然而,天逸的好声音旅程远
中超23轮战罢,四级分化谁夺冠?谁降级?今天看了中超积分榜,出现了四级分化。冠军之争虽然前期三镇很猛,霸占积分榜23轮之多,也展现了自己的实力。但是相对山东,必须更加稳定。不该输的球还是不能输。战术上三镇一直倚仗外援的表
牙买加短跑田径为什么碾压美国美国人口约3。33亿,其中拥有短跑天赋的非洲裔占13。4,约4462。2万。拥有顶尖运动训练条件科技辅助手段和成熟选拔体制的美国田径队曾雄霸天下,往往囊括短跑项目的所有奥运金牌,直
jQuery事件的解绑和触发jQuery事件的解绑和触发off()事件解绑11解绑全部事件处理函数语法元素集合。off(事件类型)会把p的click事件对应的所有事件处理函数全部移除body我是p标签body
从入围赛到世界之巅,DRX这一年真的是神迹不可思议的奇迹!冒泡赛打满两个bo5再从入围赛杀出来的四号种子冠军!恭喜Deft最后一舞最终圆梦!恭喜Beryl三年三进总决赛捧起第二座S冠!恭喜Kingen从公认的短板一路进化到