当前位置: 首页 > news >正文

Linux 基本语句_10_进程

进程和程序的区别:

程序是一段静态·的代码,是保存在非易失储存器上的制令和数据的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序的一次执行过程,包括了动态创建、调度、执行和消亡的整个过程,他是程序执行和资源管理的最小单位。可以用一个程序创建许多进程。或者反过来说,许多进程运行的可以是同一程序

fork函数,fork函数能复制整个父进程的所有代码,但不同的是其访问的实际物理地址和父进程不通,子进程虽然复制了父进程的所有代码,但实际执行的是fork()函数以下的部分,若当前进程是父进程则返回值大于零,否者返回值等于零

简单的fork函数伪代码:

#include <unistd.h>pid_t fork(void) {// 创建一个新的进程// 复制父进程的内存空间,包括代码、数据、堆栈等,采用写时复制技术if (/* 当前进程是子进程 */) {return 0; // 返回0表示这是子进程} else if (/* 当前进程是父进程 */) {return child_pid; // 返回子进程的进程ID} else {return -1; // 表示fork失败}
}

fork函数运用代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main(int argc, const char *argv[]){pid_t pid;printf("我是父进程我正准备创建一个子进程\n");pid = fork();//创建一个子进程if(pid == -1){printf("进程创建失败\n");}else if(pid > 0){printf("我是父进程已经成功创建子进程编号为: %d\n", pid);}else if(pid == 0){printf("我是子进程\n");}return 0;
}

在这里插入图片描述

getpid获取进程自身ID,getppid获取进程父进程的ID

检验地址使用关系代码:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int main(int argc, const char *argv[]){int cnt = 0;pid_t pid;printf("我是父进程我正准备创建一个子进程\n");pid = fork();//创建一个子进程if(pid == -1){printf("进程创建失败\n");}else if(pid > 0){cnt = cnt + 1;                                                           printf("我是父进程已经成功创建子进程编号为: %d\n", pid);printf("CNT: %d,address: %p\n", cnt , &cnt);}else if(pid == 0){cnt = cnt + 1;printf("我是子进程我的编号为%d,我的父进程编号%d\n", getpid(), getppid());printf("CNT: %d,address: %p\n", cnt , &cnt);}return 0;
}

在这里插入图片描述
可以看出父子进程,输出cnt的地址都是一样的,说明父子进程都用的一个虚拟地址,但是cnt输出却都是1说明两者cnt的物理地址不一样

http://www.lryc.cn/news/225861.html

相关文章:

  • 矩阵起源加入 OpenCloudOS 操作系统开源社区,完成技术兼容互认证
  • 3D物理模拟和视觉特效软件SideFX Houdini mac中文介绍
  • GPT-4.0网页平台-ChatYY
  • mysql,redis导入导出数据库数据
  • conda修改虚拟环境名称
  • c语言,将奇数和偶数分类
  • 前端设计模式之【观察者模式】
  • HTTPS安全相关-通信安全的四个特性-ssl/tls
  • 并查集:Leetcode765 情侣牵手
  • 如何设计一个网盘系统的架构
  • 【代码随想录】算法训练计划17
  • “护肤品销售策略:从“免费拼团”到“3人回本大放送”“
  • uniapp和vue3+ts开发小程序,使用vscode提示声明变量冲突解决办法
  • CCLink转Modbus TCP网关_MODBUS报文配置
  • 【开源】基于Vue.js的大学兼职教师管理系统的设计和实现
  • Mysql数据库 14.SQL语言 视图
  • 【Acwing171】送礼物(双向dfs)题解
  • 机器学习---多分类SVM、支持向量机分类
  • 玩转Linux基本指令
  • 【开源分享】国内可用的免费安卓GPT语音助手 - 可音量键唤起,可联网
  • 什么是安全平行切面
  • Git 入门使用 —— 建库、代码上下传、常用命令
  • HTML5学习系列之简单使用1
  • 计算机网络第一章(计算机网络开篇)
  • 百度秋招突击手册面试算法题:三数之和
  • 归并排序 图解 递归 + 非递归 + 笔记
  • 2023 年最好的 Android 系统修复/刷机应用程序和软件
  • Linux下内网穿透实现云原生观测分析工具的远程访问
  • 卡数据兼容性要求-M2M架构
  • C++入门篇3(类和对象【重点】)