进程的结束

news2024/12/28 4:00:31

回顾上节:

父子进程的关系

子进程是父进程的副本

子进程获得父进程的数据段,堆,栈,正文段共享

在fork之后,一般情况下那个会先运行是不确定的,取决于操作系统

练习:

用进程实现文件拷贝

代码如下

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

//./a.out src dest 
int main(int argc, const char *argv[])
{
	if (argc != 3)
	{
		printf("Usgae: %s <src> <dest>\n",argv[0]);
		return -1;
	}

	pid_t pid = fork();

	int fd_s = open(argv[1],O_RDONLY);
	if (fd_s < 0 )
	{
		perror("open fail");
		return -1;
	}
	int fd_d = open(argv[2],O_WRONLY|O_CREAT|O_EXCL|O_TRUNC,0666);
	if (fd_d < 0 )
	{
		if (errno == EEXIST)
		{
			//perror("1 open fail");
			fd_d = open(argv[2],O_WRONLY);
		}else
		{
			perror("2 open fail");
			return -1;
		}
	}

	if (pid == -1)
	{
		perror("fork fail");
		return -1;
	}

	char buf[1024] = {0};
	struct stat st;
	stat(argv[1],&st);
	int len = st.st_size;
	int cnt = 0;
	if (pid > 0)
	{
		while (cnt < len/2)
		{
			int ret = read(fd_s,buf,sizeof(buf));
			cnt += ret;
			write(fd_d,buf,ret);
		}

	}else if (pid == 0)
	{
		lseek(fd_s,len/2,SEEK_SET);
		lseek(fd_d,len/2,SEEK_SET);
		while (cnt < len-len/2)
		{
			int ret = read(fd_s,buf,sizeof(buf));
			cnt += ret;
			write(fd_d,buf,ret);
		}
	}

	close(fd_s);
	close(fd_d);
	
	return 0;
}

进程创建好之后

1.子进程与父进程做的事情差不多     //子承父业

多任务   : 淘宝服务器     程序   ------创建子程序

2.父进程创建出子进程之后,子进程做的事情与父进程完全不同   //自力更生

shell程序  --- bash

exec函数族

作用: 

启动(运行)一个新的程序

用一个新的进程的镜像取代(各个段)当前进程的镜像(各个段),但不包括pcb

函数族:

1、int  execl(const char *path,const char *arg,.....);

l:list

path:要执行的文件路径  eg:"bin/ls"

arg:要执行的文件的名字  eg:"ls"

....:可执行文件所需要的参数  eg:对于cp指令,就需要原文件和目标文件

2、int  execv(const char *path,const char *arg,.....);

V --- vector(向量)

3、int  execlp(const char *file,const char *arg,.....);

带p的命令,除了第一个参数与上述不一样之外,其他参数相同。此时不需要写入文件的路径,只需要填入要执行的可执行文件的文件名     //可执行文件必须在系统的/bin目录中

4、int execvp(const char *file, char *const argv[]);

5、int execvpe(const char *file, char *const argv[],char *const envp[]);

env(environment)环境变量

一个一个字符串,只不过这个字符串的前面是,后面是

char *const envp[]:传递你要打印的环境变量

进程的执行

结束方式:

1.正常结束

1)main 中 return

2)exit() //库函数 

c库函数,会执行io库的清理工作,关闭所有 的流,以及所有打开的文件。

注册清理函数(atexit)。

3)_exit,_Exit 会关闭所有的已经打开的文件,不执行清理函数。 //系统调用 

//4) 主线程退出  

//5)主线程调用pthread_exit 

2.异常结束

6)abort()

7)signal   kill pid

//8) 最后一个线程被pthread_cancle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某家用智能路由权限绕过

You can’t improve your past, but you can improve your future. 你无法改变过去&#xff0c;但你可以让未来变得更美好。 漏洞描述 某家用智能路由存在权限绕过&#xff0c;通过Drop特定的请求包访问未授权的管理员页面 漏洞实战 访问漏洞url http://x.x.x/index.html…

数据结构 AVL树

概述 AVL树的主要特点是在插入或者删除节点后&#xff0c;树会自动保持其平衡性&#xff0c;从而保证了最坏情况下&#xff0c;查找、插入和删除的时间复杂度都是O&#xff08;log n&#xff09;。注意AVL树是符合二叉搜索树的规则&#xff0c;即左子树小于根节点数值&#xf…

为什么说视频监控平台必须要有转码能力?视频汇聚平台EasyCVR视频转码能力解析

在当今数字化时代&#xff0c;视频监控技术已成为社会安全、城市管理、企业运营等多个领域不可或缺的一部分。随着监控系统的广泛应用和技术的不断进步&#xff0c;视频数据的处理与传输需求日益复杂多样&#xff0c;这使得视频监控平台必须具备强大的转码能力显得尤为重要。以…

Python模拟退火算法

目录 模拟退火算法简介模拟退火算法的步骤模拟退火算法的Python实现场景&#xff1a;函数优化问题 代码解释总结 模拟退火算法简介 模拟退火算法&#xff08;Simulated Annealing, SA&#xff09;是一种基于物理退火过程的随机搜索算法&#xff0c;用于寻找全局最优解。其灵感…

如何用OceanBase实现HBase架构升级

随着数据量的爆炸性增长&#xff0c;特别是半结构化和非结构化数据的涌现&#xff0c;传统关系型数据库如 MySQL 遭遇了前所未有的挑战。这一背景下&#xff0c;为非结构化数据管理而生的 NoSQL 数据库&#xff0c;以及旨在解决海量数据存储难题的分布式技术应运而生&#xff0…

Day08-K8S安全框架RBAC

Day08-K8S安全框架RBAC 0、昨日内容回顾:1、K8S安全框架1.1 K8S的安全架构流程图解1.2 RBAC1.3 基于用户的权限管理实战1.4 RBAC基于组的方式认证:1.5 serviceaccount 2、持久卷与动态存储2.1 传统基于存储卷的方式挂载的缺点2.2 引入PV和PVC实现后端存储解耦2.3 引入动态存储类…

鸿蒙(API 12 Beta3版)【播控特性简介】分布式媒体会话

使用媒体播控&#xff0c;可以简单高效地将音视频投放到其他HarmonyOS设备上播放&#xff0c;如在手机上播放的音视频&#xff0c;可以投到2in1设备上继续播放。 HarmonyOS提供了统一的应用内音视频投播功能设计&#xff0c;通过使用系统提供的投播组件和接口&#xff0c;应用…

FLUX:AI 图像生成的新王者;VideoDoodles:在视频中添加手绘涂擦动画丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

提升家居品质,从一颗螺丝开始:深度解析定制螺丝服务

在家具设计行业&#xff0c;每一件作品都是设计师动能的结晶&#xff0c;它们不仅背负着对审美的追寻&#xff0c;而且还具有对作用考虑。在这过程中&#xff0c;螺钉作为连接各部件的主要部件&#xff0c;其重要性不言而喻。家具的坚固性和美观度完全取决于螺钉的挑选运用。传…

【机器学习】可视化注意力的基本概念以及几种常见的注意力可视化方法

引言 在机器学习中&#xff0c;尤其是深度学习领域&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;已经成为处理序列数据&#xff08;如自然语言处理、图像识别等&#xff09;的一种重要技术。可视化注意力可以帮助我们理解模型是如何关注输入数据的特定部…

数据结构-常见的七大排序

上节中我们学习了七大排序中的五种(插入排序、希尔排序、堆排序、选择排序、交换排序) 数据结构-常见的七大排序-CSDN博客 这节我们将要学习快速排序(hoare、指针法、挖洞法(快排的延伸)、快速排序非递归(栈)) 1.快速排序 1.1 hoare法 1.1思路 1.选出一个key&#xff0c;一…

Centos 7.9 安装 图解版 小白必看 最新

兄弟们&#xff0c;非小白就散了吧 安装VMware和CentOS7系统 CentOS7.9.io镜像下载 建议 阿里云下载cents镜像ios 链接如下 https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso VMware安装 win7用 12 win10 用 15 win11用 16.2.4 …

Layui——隐藏表单项后不再进行验证

目录 修改后的部分代码 修改后的完整代码 我编辑用户信息和添加新用户用的是同一个表单&#xff0c;不同的是编辑用户信息里没有密码项和确认密码项&#xff0c;但是把它们隐藏后仍然要进行验证&#xff0c;也就是说它们俩的验证并没有随着表单项的隐藏而关闭。原因&#xf…

阴阳脚数码管

1.小故事 最近&#xff0c;我接到了一个既“清肺”又“烧脑”的新任务&#xff0c;设计一个低功耗蓝牙肺活量计。在这个项目中我们借鉴了一款蓝牙跳绳的硬件设计方案&#xff0c;特别是它的显示方案——数码管。 在电子工程领域&#xff0c;初学者往往从操作LED开始&#xff…

JavaSE 网络编程

什么是网络编程 计算机与计算机之间通过网络进行数据传输 两种软件架构 网络编程3要素 IP IPv4 IPv6 Testpublic void test01() throws UnknownHostException { // InetAddress.getByName 可以是名字或ipInetAddress address InetAddress.getByName("LAPTOP-7I…

混剪素材哪里下载?网盘格式的素材网站分享

在今天的文章中&#xff0c;我们将深入探讨如何在互联网上寻找高质量的混剪素材&#xff0c;尤其是对于短视频和自媒体制作者来说&#xff0c;寻找合适的素材至关重要。在本文中&#xff0c;我将向大家推荐一系列优秀的素材下载网站&#xff0c;这些网站提供可以直接下载到百度…

Java入门基础16:集合框架1(Collection集合体系、List、Set)

集合体系结构 Collection是单列集合的祖宗&#xff0c;它规定的方法&#xff08;功能&#xff09;是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…

分布式事务和一致性

分布式事务是什么&#xff1f; 分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理&#xff0c;这些数据库或应用程序可能 布在不同的物理节点上&#xff0c;甚至可能位于不同的地理位置&#xff0c;在分布式事务中&#xff0c;需要确保所有参与者的事…

C++ 之动手写 Reactor 服务器模型(一):网络编程基础复习总结

基础 IP 地址可以在网络环境中唯一标识一台主机。 端口号可以在主机中唯一标识一个进程。 所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port 。 字节序 TCP/IP协议规定&#xff0c;网络数据流应采用大端字节序。 大端&#xff1a;低地址存高位&#xff0c…

[陇剑杯 2021]wifi WP

9.1小王往upload-labs上传木马后进行了cat /flag&#xff0c;flag内容为_____________。&#xff08;压缩包里有解压密码的提示&#xff0c;需要额外添加花括号&#xff09; 附件信息&#xff1a; 拿到附件 先看服务器.pcapng 可以发现只有发出去的包&#xff0c;且为哥斯…