合肥网站建设sina,免费做海报的网站,深圳市城乡建设部网站首页,网站建设与维护浙江省试题本节目录1.进程终止2.exit与_exit函数1.进程终止
进程终止时#xff0c;操作系统做了什么#xff1f; 释放进程中申请的相关内核数据结构和对应的数据和代码。本质就是释放系统资源。
进程终止的常见方式 a.代码跑完#xff0c;结果正确 b.代码跑完#xff0c;结果不正确…
本节目录1.进程终止2.exit与_exit函数1.进程终止
进程终止时操作系统做了什么 释放进程中申请的相关内核数据结构和对应的数据和代码。本质就是释放系统资源。
进程终止的常见方式 a.代码跑完结果正确 b.代码跑完结果不正确 c.代码没有跑完程序崩溃了
main函数的返回值main函数返回的意义是什么return 0含义是什么为什么总是0 main函数的返回值是此进程的进程退出码意义返回给上一级进程用来评判该进程执行结果用的可以忽略并不是总是0可以是其他数字0表示success,非0表示允许的结果不正确非零值有无数个不同的非零值就可以标识不同的错误原因给我们的程序在运行结束之后结果不正确方便定位错误的原因。
用代码如何终止一个进程 return语句就是终止进程的return退出码。 exit在代码的任何地方调用都表示直接终止进程。 return是一种更常见的退出进程方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返 回值当做 exit的参数。
查看一个进程的进程的退出码 echo $? : 获取最近的一个进程执行完毕的退出码。
[jyfVM-12-14-centos 进程]$ ./mytest7
Before:pid is 30381
After:pid is 30381,fork return 30382
After:pid is 30382,fork return 0
[jyfVM-12-14-centos 进程]$ echo $?
0
strerror根据传入的退出码得到其退出码的含义 1 #include stdio.h2 #include string.h3 4 5 int main()6 {7 int i0;8 for(i 0;i133;i) 9 {10 printf(%d:%s\n,i,strerror(i));11 }12 return 0;13 }
~
[jyfVM-12-14-centos 进程]$ ./mytest9
0:Success
1:Operation not permitted
2:No such file or directory
3:No such process
4:Interrupted system call
5:Input/output error
6:No such device or address
7:Argument list too long
8:Exec format error
9:Bad file descriptor
10:No child processes
11:Resource temporarily unavailable
12:Cannot allocate memory
13:Permission denied
14:Bad address
15:Block device required
16:Device or resource busy
17:File exists
18:Invalid cross-device link
19:No such device
20:Not a directory
我们可以使用这些退出码和含义当然如果我们想自己定义也可以自己设计一套退出方案。 ***程序崩溃的时候退出码无意义一般而言退出码对应的return语句没有被执行。***比如程序内出现数组越界啦野指针啦等程序直接崩溃此时它们的退出码是无效的没有执行return语句。 2.exit与_exit函数
#include unistd.h
void exit(int status);int main(){printf(hello);_exit(0);}
//运行结果为空
//注意字符串的长度不能太长否则缓冲区满会自动刷新int main(){printf(hello);exit(0);}
//运行结果为helloexit函数是语言层面的函数_exit是系统层面的接口 printf - \n数据是保持在缓冲区的请问这个缓冲区在哪里谁维护的 我们发现这个缓冲区一定不在操作系统内部中如果在_exit函数应该也能将数据刷新出来但它不能exit函数可以所以缓冲区是C标准库的C标准库给我们维护的。