前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTP之进程的退出

RTP之进程的退出

作者头像
Taishan3721
发布2019-08-23 17:01:28
1.2K0
发布2019-08-23 17:01:28
举报
文章被收录于专栏:这里只有VxWorks这里只有VxWorks

在《Task之任务的删除》里介绍了任务是如何退出的,那么进程呢?进程里可以启动多个任务,这些任务的存在与进程的存在是否有关系?

1

主任务返回,即main()函数执行return后,整个进程就会终止。看个例子

执行这个RTP

可以看到taskA并没有执行

把主任务的优先级降低

这次taskA能够执行了。这样就证明了主任务返回时,整个RTP也就退出了

2

如果主任务的工作确实已经做完了,而其它任务还有工作要做怎么办?可以让主任务自己退出,而不是直接返回:调用taskExit()

不管主任务的优先级如何,其它任务都会执行了

可以看到,即使主任务已经退出,taskA还会执行,说明RTP并没有随着主任务一起结束

3

为了让其它任务正常执行,除了主任务调用taskExit(),我在开发阶段常用的方法是taskSuspend()

这样通过主任务的状态,来控制RTP的状态,并且可以随时查看RTP的属性了

4

在2这种情况,即主任务调用taskExit()后,RTP是什么时候退出的呢:RTP不能为空,当最后一个任务退出后,RTP退出!

在RTP中启动多个任务

可以看到,RTP里的每个任务都会被执行,执行顺序取决于它们自己的优先级。只有它们都执行完之后,RTP才会结束

5

任一任务调用exit(),整个RTP就会退出

taskB的优先级高一些,所以它一旦被创建,就会抢占执行

一旦taskB调用exit(),整个RTP就都结束了,所以taskA和主任务就没有机会执行了

其实主任务在调用return正常返回时,就相当于调用了exit()

6

强制终止RTP,即调用rtpDelete()。把之前的例子改一下,这次让多个任务不退出

然后调用rtpDelete()删除RTP

rtpDelete()同时把RTP中的所有任务也删除了

也就是说,如果RTP中某个任务调用rtpDelete(0)的话,就相当于调用了exit(0),有兴趣的童鞋,可以试一试,也看看它俩的源码

总结一下,对于用户态的程序:

  • 任一任务调用taskExit() - 当前任务结束
  • 非主任务返回 - 相当于调用taskExit()
  • rtpDelete() - 进程结束
  • 任一任务调用exit() - 相当于调用rtpDelete()
  • 主任务返回 - 相当于调用exit()

最后留个问题:内核态中,1-任务入口函数返回、2-其它函数返回、3-taskExit()、4-exit()、5-taskDelete(),这五者的关系如何?

这正是:

单任务可退出,无关它人调度。

主任务若返回,进程整体销毁。

我是泰山,专注VX15年!

欢迎关注VxWorks567

一起学习,共同进步!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档