Linux 进程 1.3— 进程的退出

正常退出:

  1. main() 函数调用 return
  2. 进程调用 exit() ,标准C库
  3. 进程调用 _exit() 或者 _Exit(),属于系统调用;
    补充
  4. 进程最后一个线程返回
  5. 最后一个线程调用 pthread_exit

异常退出
7. 调用 abort 。 void abort(void) 中止程序执行,直接从调用的地方跳出。 头文件: #include<stdlib.h>
8. 进程接收到某些信号时,如:ctrl + C
9. 最后一个 线程对 取消(cancellation)请求作出 响应

#include<stdlib.h>
void exit (int status);
void _Exit (int status);

#include<unistd.h>
void _exit (int status);

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(){
	pid_t = pid;
	int cnt = 0;
	pid = vfork();
	
	if(pid > 0){
		while(1){
			printf("cnt = %d\n",cnt);
			printf("this is a father, pid = %d\n",getpid());   sleep(1);
		}
	}
	else if(pid == 0){
		while(1){
			printf("this is a son, pid = %d\n",getpid());
			sleep(1);
			cnt++;
			printf("cnt = %d\n",cnt);
			if(cnt == 3){	
				_exit(0);   // break;  使用 break 后,cnt 的值不再是 3 ,子进程结束后,cnt 变成一个奇怪的数, break 会破坏;
							// 红色警告,进程必须使用 exit 相关的 函数退出,否则就会 产生其他的错误; 
			}     
		}
	}
	printf("cnt = %d\n",cnt);
	
	return 0;
}

运行结果如下:
在这里插入图片描述
_exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;
exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。
exit()函数与_exit()函数最大的区别就在于 exit()函数在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。
注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值