linux——进程退出

文章详细介绍了进程的正常退出和异常退出方式,包括main函数的return、exit()、_exit()和_abort()等函数的作用,以及进程收到信号后的反应。在进程退出时,会关闭所有打开的描述符并释放内存。建议在程序中优先使用exit(),因为它会进行数据冲刷。同时,父进程可以通过wait或waitpid获取子进程的退出状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程退出分为正常退出&异常退出

正常退出:

        1、main函数调用return

        2、进程调用exit(),标准c库

        3、进程调用_exit()或者_Exit(),属于系统调用

        补充

        1、进程最后一个线程返回

        2、最后一个线程调用pthread_exit

异常退出:

        1、调用abort,等于放弃当前进程

        2、当进程收到某些信号时,如ctrl+c

        3、最后一个线程对取消(cancellatio)请求做出响应

        不管进程如何终止,最后都会执行内核中的同一段代码。这段代码为相应进程关闭所有打开描述符,释放它所使用的存储器等。

        对以上任意一种终止清醒,我们都希望终止进程能够通知其父进程它是如何终止的。对于三个终止函数(exit\_exit\_Exit),实现这一点的方法是,将其退出状态(exit status)作为参数传送给函数。在异常终止情况下,内核(不是进程本身)产生一个指示其异常终止原因的终止状态(terminatio statu)。在任意一种情况下,该终止进程的父进程都能用wait或waitpid函数取得其终止状态。

退出api

#include <stdlib.h>

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

void _exit(int status);


#include <stdlib.h>

void _Exit(int status);

代码演示:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
	pid_t pid;
	int cnt=0;	
	pid=vfork();
	

	if(pid>0){
		while(1){
			printf("cnt=%d\n",cnt);
			printf("this is father print%d\n",getpid());
			sleep(1);
		}
	}
	if(pid==0){
		while(1){
			printf("this is child print,pid=%d\n",getpid());
			sleep(1);
			cnt++;
			if(cnt==3){
				//break;
				//exit(0);
				//_exit(0);
				_Exit(0);
			}
		}	
	}

	return 0;
}

进程退出调用(exit\_exit\_Exit)函数,尽量调用exit函数,调用后会对子进程调用的数据进行一下冲刷处理再退出,_exit\_Exit是直接退出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值