c语言的进程

本文介绍了C语言中用于进程管理的关键函数,包括fork()用于创建新进程,exit()用于结束进程,wait()和waitpid()用于父进程等待子进程的结束。通过这些函数,可以实现进程间的交互和控制,避免僵尸进程的产生。

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

在这里插入图片描述
样例:

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

int main(){
	printf("开始\n");
	int pid=fork();
	printf("%d\n",pid);
	if(pid){                       //父进程执行
		int status;
		int result=wait(&status);   //等待子进程结束
		if(result == -1 || status){ //子进程异常结束
			printf("出错!\n");
		}
		else{                       //子进程正常退出
			printf("结束\n");
		}
	}
	else{                             //子进程执行
		printf("1/0=%d\n",1/0);
	}
	return 0;
}

输出
在这里插入图片描述
输出了一次开始,一个新建进程的ID4067,子进程中获取的ID0,输出出错

pid_t fork(void)函数:
作用:
创建一个新的进程,将现在运行的进程的处理器状态,地址空间直接拷贝到新进程中,新进程接着fork()函数之后进行,所以样例中只输出了一次开始。
返回值:
返回进程表示ID,可以区分父进程与子进程,父进程返回新建的子进程ID,子进程返回0,可以通过判断返回值使父进程与子进程执行不同的操作,那么我们就可以实现类似c++的try-catch功能。

void exit(int status)函数:
作用:
当进程运行结束或者出错(如越权,除数为0),会被系统终止,当然我们也可以调用exit()函数主动结束进程,可以模拟c++的throw
参数:
int型参数表示结束进程时的状态

*pid_t wait(int status)函数:
作用:
使父进程的状态变为等待态,直到父进程的所有子进程中的一个成功退出并返回结束状态值(父进程不能直接等待子进程的子进程)避免父进程先结束,而导致子进程变为僵尸进程
参数:
int*指针,储存子进程结束状态值,类似catch
返回值:
结束状态的子进程的进程标识ID,等待过程中出现错误(如没有可以等待的子进程),就返回-1

*pid_t waitpid(pid_t pid,int stat_loc,int options )函数:
作用:
可以指定一个进程标识ID来等待一个特定的进
参数:
pid参数大于0时等待进程ID为pid的进程
pid参数为-1时等待所有子进程的任何一个
pid参数为0时等待所有进程组ID与父进程相同的子进程
pid小于-1时等待任何进程ID为pid绝对值的进程
stat_loc与wait相同
options特殊控制选项
返回值:
与wait相同

基础薄弱,如有遗漏及错误,发现后改正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值