Linux中exit与return

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

猜你喜欢

转载自blog.csdn.net/qq_46780256/article/details/120654326