过程的参与形状 和 过程等待 exit()和_exit(),wai

  当一个过程终止了,我们需求知道过程参与时的形状,我们需求经过过程完毕时的参与码来识别。

  过程正常完毕时:

  1.从main()函数前去

  2.调用exit()函数

  3.调用_exit()//系统调用

  我们可以用(echo $?)检查上一次过程履行完毕的参与码。

  来看下面一个例子:

  ?

  依照我们下面讲的,当这个依次履行完毕后,我们检查参与码:发明从exit(2)处将过程完毕了。参与码为exit()的参数。

  ?

  再来看看exit(),和_exit()的差别吧:?

  ?

  履行结果为:等待2秒以后打印"hello world",过程完毕

  ?

  ?

  等待两秒以后,没有停止输入字符串,过程完毕。

  这里为什会先等2秒再打印,因为这里的printf()是按行刷新的,然则这里并没有'\n'就不会按行刷新缓冲区,等到过程完毕再刷新缓冲区,停止输入,切记,这里不成以了解为sleep(),在printf()之前履行。

  exit()和_exit()都是过程正常参与的的方法,从下面的例子可以看到,_exit(),就是将过程强行参与,而exit()在这里做了一些工作,履行用户定义的清理函数,还有这里可以看到的刷新缓冲区,还有封闭文件流等

  在之前讲过程形状是讲过,假设子过程参与,而父过程对其不论掉落臂,就有能够形成僵尸过程,而形成内存泄漏,而且父过程创立的子过程是为了让其履行义务,固然父过程需求知道子过程义务完成的若何,那么父过程就需求经过过程等待的方法来收受接管子过程资本,获得子过程推出形状。

  pid_t wait(int *status);

  我们称其为阻塞式等待,等待胜利之前父过程处于阻塞形状。

  前去值: 等待胜利为被等待过程的pid,掉败为-1.

  参数:输入型参数,获得子过程的参与形状,不关心则可以设置为NULL 。

  ?

  pid_t waitpid(pid_t pid,int *status,int options);

  第一个参数:pid>0代表等待指定的过程。pid=-1,代表等待任意一个过程

  第二个参数:输入型参数,获得子过程的推出形状,不关心则可以设置为NULL。

  第三个参数://TODO下面有讲到

  前去值:若等待胜利该值为被等待的过程的pid,否则为-1。

  ?

  这里的过程参与形状不能复杂的算作int类型来看,可以算作位图来看,具体细节以下图示:

  ?

  我们可以依据参与形状的低7位可否位0来辨别过程可否是正常终止的

  (一)wait()

  假设父过程创立了多个子过程,要保证wait()调用次数和子过程数量个数相反

本文地址//a/tyzxxw/20200415-183.html,转载请注明出处!
上一篇:股票剖析软件
下一篇:没有了
阅读排行
最近发表