void exit(int status);
exit结束一个进程,不管哪个函数调用这个函数都会结束进程
litingting@litingting-vm:~$ vi a.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char* argv[])
{
return 104;
}
1、主函数的返回值由它的父进程接收,此程序的父进程是bash终端,
litingting@litingting-vm:~$ make a
cc a.c -o a
litingting@litingting-vm:~$ ./a
在bash终端中用echo $?来查看bash终端的子进程的返回值
litingting@litingting-vm:~$ echo $?
104
2、同时存在exit 和 return 判断会不会执行到return?不会的
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>//exit的头文件
int main(int argc, char* argv[])
{
//判断会不会执行到return
exit(99);
return 104;
}
litingting@litingting-vm:~$ make a
cc a.c -o a
litingting@litingting-vm:~$ ./a
litingting@litingting-vm:~$ echo $?
99
上述代码说明:在主函数里return 和 exit 的功能一样都是结束一个进程
3、在普通函数中使用return 会不会结束一个进程?不会
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
int fun1()
{
return 10;
}
int main(int argc, char* argv[])
{
fun1();
while(1);
return 104;
}
litingting@litingting-vm:~$ make a
cc a.c -o a
litingting@litingting-vm:~$ ./a
执行进程发现a进程并没有结束,若改为exit(10)
int fun1()
{
exit(10);
}
litingting@litingting-vm:~$ make a
cc a.c -o a
litingting@litingting-vm:~$ ./a
litingting@litingting-vm:~$
发现a进程结束了
总结:只要程序执行到了exit,这个进程就会被结束。
return:返回给函数的调用者,在主函数中执行return,相当于exit