其实进程终止不外乎就以下三种情况:
我们一般关心程序为什么会失败而不关心为什么会成功。换句话说操作系统如何判断程序运行成功呢?
一般在程序末尾返回0以确定程序运行成功。而这个0会被父进程bash接收。
打印返回码
可以通过 echo $? 查看最近进程退出码。
例如将返回码改为11.
可以发现第一次返回码是11,第二次第三次就变为了0。这是因为第二三次打印的是echo命令的返回码。除了0是正确返回码,其他的都属于错误返回码,为了分辨不同错误码的意义,linux里专门有一个strerror将错误码翻译成字符串。
打印看看不同错误码对于的信息是怎样的
例如查找一个不存在的文件,系统会直接显示该文件不存在。
这是ls查找不成功返回2错误码,再有对应转化打印出来。
errno是C语音提供的一个全局变量,它保存着最近一次执行程序的错误码。
打印errno就可以把最后错误的错误码打印出来,并且可以当作返回码返回给父进程。
退出程序我们可以直接return,也可以使用exit函数。
那么return和exit有什么区别呢?
例子
exit在任意位置被调用都标志着该进程直接退出。而return在其他函数中代表函数结束,在main函数里代表进程退出。
注意这里打印没有\n,而对于linux来说,如果printf没有加\n,那么它会先在缓存区里,等程序执行完毕后再打印,也就是说要先休眠一秒再打印。
接下来同一份代码,将exit改为_exit看看。
可以发现它 并没有将缓冲区里的数据打印出来。
_exit是系统接口,它会直接在系统层面将进程终止,exit是库函数先会将文件等内容刷新在调用_exit。