0
点赞
收藏
分享

微信扫一扫

视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决

夏天的枫_ 2天前 阅读 2

在开始之前我们先再重新理解一下进程间的独立性。

进程 = 内核数据结构(task_struct + mm_struct + 页表) + 代码和数据

在这里插入图片描述

进程创建:

我们已经使用过fork()函数,fork函数就是用来创建子进程

在来说一下fork函数的返回值。
子进程返回的是0,父进程返回的是子进程的pid。

为什么要这么返回呢?
为的就是让父进程管理好子进程。

进程终止:

终止是在干什么?

我们已经说过,进程是内核数据结构 + 代码和数据。

那么终止就是释放这个内核数据结构 + 代码和数据。

但是我们也说过,进程有僵尸状态,当父进程还在忙活,子进程已经结束,此时子进程会先将代码和数据释放掉,但是task_struct还不能释放,
因为这里存放着进程的退出信息,所以父进程回收时才可以释放掉。

终止的3种情况。

  1. 代码跑完,结果不对(!0)。
  2. 代码跑完,结果正确(0)。

以上两种情况都是可以通过退出码知道的。
那么退出码是什么呢?

在这里插入图片描述
我们在bash命令行中可以使用echo $?进行查看最近一次子进程的退出码。

在这里插入图片描述
所以:我们平时都是return 0,就默认意味着我们写的程序都是正确的。但是真的如此吗哈哈。

那么退出码所对应的含义是什么呢?

我们来打印看看。
在这里插入图片描述
在这里插入图片描述
但是我们也不必太在意退出码。因为退出码也是可以自定义的。
在这里插入图片描述
结果:
在这里插入图片描述
那么第三种?

  1. 进程异常退出。

就像修改野指针的指向,OS一看,那可不行,直接给你一个信号,让你退出。在这里插入图片描述

在这里插入图片描述


本质就是发送一个信号给进程让进程结束。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

结论:
一个进程终止了,先看是否异常退出,再看退出码!

如何终止?

持续更新…

进程等待:

举报

相关推荐

0 条评论