第三十九节 Linux系统编程-linux进程-fork创建新进程和进程终止(三)

本文深入探讨Linux中fork函数的使用,包括如何创建子进程,子进程与父进程的区别,以及资源统计信息的处理。同时,介绍了进程终止的exit函数,详细解析其参数与返回值,帮助读者全面理解Linux进程管理。

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

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

实验-fork 创建新进程

linux中,可以使用fork函数创建和当前进程一模一样的进程,叫子进程,原来的进程叫父进程

 

使用 man 学习 fork 进程

1)如下图所示,使用命令“man 2 fork”

2)如下图所示,函数 fork

3)接着注意一下相关的函数,如下图所示

4)接着介绍一下 fork 的用法

pid_t fork(void);
– 参数:无
– 返回值:执行成功,子进程pid 返回给父进程,0 返回给子进程;出现错误-1,返回给父进程。执行失败的唯一情况是内存不够或者id 号用尽,不过这种情况几乎很少发生。

 

第二:

fork函数(看了例子之后再回头理解一次下面几句话)
– 系统函数fork 调用成功,会创建一个新的进程,它几乎会调用差不多完
全一样的fork 进程
– 子进程的pid 和父进程不一样,是新分配的
– 子进程的ppid 会设置为父进程的pid,也就是说子进程和父进程各自的
“父进程”不一样
– 子进程中的资源统计信息会清零
– 挂起的信号会被清除,也不会被继承
– 所有文件锁也不会被子进程继承

 

函数例程

编写简单的 fork.c 文件测试 fork 函数

#include <stdio.h>
#include <unistd.h>

main()
{
	pid_t pid;
	int i=100;
	
	pid = fork();
	//调用出错
	if(pid == -1){
		printf("fork failed\n");
		return 1;
	}
	//返回给父进程子进程号,返回值大于0
	else if(pid){
		i++;
		printf("\nThe father i = %d\n",i);
		printf("The father return value is %d\n",pid);
		printf("The father pid is %d\n",getpid());
		printf("The father ppid is %d\n",getppid());
		while(1);
	}
	//返回子进程0,返回值等于0返回给子进程
	else{
		i++;
		printf("\nThe child i = %d\n",i);
		printf("The child return value is %d\n",pid);
		printf("The child pid is %d\n",getpid());
		printf("The child ppid is %d\n",getppid());
		while(1);
	}
	return 0;
}

 

第三:

1)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录
“/home/linuxsystemcode/exe”,将源码 fork.c 拷贝进去,如下图所示。

2)使用命令“arm-none-linux-gnueabi-gcc -o fork fork.c -static”编译 fork 文件,如下图所示,使用命令“ls”可以看到生成了 fork 可执行文件。

3)将编译成的可执行文件 fork,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序如下。

如上图所示,可以看到打印的父进程和子进程号,然后其中打印的 i 都是一样的。子进程可以使用父进程中定义的变量,和父进程中的变量却是不同的变量。

 

第四:

进程终止 exit

1)如下图所示,使用命令“man 2 exit”

2)如下图所示,有一些相关的函数 execve(2), exit_group(2), fork(2), kill(2), wait(2)等等

3)接着介绍一下 void exit(int status)的用法

void exit(int status)
参数:返回给父进程的参数。
返回值:无

 

函数_exit 和 exit 没什么区别,不需要花太多时间去追究。
创建进程还有一个 vfork 函数,感兴趣的可以通过网络找个例子实现以下,vfork 的使用会产生很多新问题,使用 vfork 创建的进程结束需要调用_exit。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值