开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:进程的挂起】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/10993
进程的终止 exit
内容介绍:
一· continue
二· break
三· return
四· exit
五·返回值
六·_exit
七·exit 和 _exit 函数的区别
接下来讲一下进程的终止,然后在linux操作系统上可以通过以下方式结束进程。
continue 、 break 、 return 、 exit 。
一、continue
continue 是结束本次循环进入下一次循环,它并不会跳出循环,也不会将循环结束。
二、break
break 会直接终止循环,直接跳出循环,然后到循环下面去执行代码。
三、return
return是返回函数
注意:
如果在main函数中,它是结束一个main函数所在的进程,结束了一个程序。
如果在一个子函数中的话,是它返回到被调用的地方,比如只有在main函数中的时候,return时才是结束程序;在其它函数中,return是返回到被调用的地方。
四、exit
exit,结束进程,无论你在这一个进程中的任何地方,只要调用exit就会终止,程序就会结束。所以说它们之间的功能是依次增强的。
五、返回值
exit有一个整型的返回值,可以传参,这个参数应该是进程的返回值,父进程可以拿到子进程的返回的value。
exit的返回值是void,这个参数是为了让它的父进程wait时能达到子进程的特殊状态。
接下来看它两个函数,exit和_exit
注意:
exit这个函数是结束进程的,需要包含.H。exit函数是库函数,因为它需要包含stdlib. H。
它不适合系统调用,这个函数不是内核提供的,返回一个value。
去子进程结束return一个值,父进程去wait。然后拿到子进程的返回值,那个返回值设个10000,然后它的父进程拿到的返回值是不对的,为什么呢?
因为那个返回值只能是一个字节,要是说这个value返回给父进程的参数低8位有效,比如子进程给父进程返回一个数时相当于只能低8位有效,这个value类似于return value,相当于子进程中去return,Return一个value给父进程,但exit的功能跟return的功能不同。
六、_exit
_exit 是一个系统调用,你看它需要包含 unistd.h。_exit 返回一个 value,返回父进程低8位有效。
七、exit 和 _exit 函数的区别
exit 是库函数,_exit是内核函数即系统调用。
我们在应用程序中,去调用_exit直接进入内核,在内核里终止进程,如果我们调用exit的话,它可以刷新未刷新的缓冲区,关闭未关闭的文件描述符。
然后exit再去调用_exit,到内核里去终止进程。也就是说_exit函数去调用_exit函数,在它的基础上,又做了好多其它的操作。
其实我们会学atexit注册退出清理函数,进程结束了它会执行一些函数进行清理,进行一些善后工作,就相当于立好遗嘱,然后等这个进程结束时干什么,这是exit和_exit。
注意:
都是用来结束进程的,你在进程的任何地方,只要掉这两个函数的其中一个,再求一个,进程就会结束。然后,库函数在系统调用的基础上,又做了一些其它额外的功能。