Linux进程的基础知识、fork复制进程

2023-10-27

目录

1、进程的基础知识:

(1)进程:

(2)PCB:

(3)进程的状态:

(4)并发与运行

 2.操作系统发展史

3.fork复制进程


1、进程的基础知识:

(1)进程:

一个正在运行的程序

(2)PCB:

进程控制块

进程控制块是用一个结构体struct task_struct来实现

(3)进程的状态:

就绪,阻塞,运行

时间片轮转调度

(4)并发与运行

 2.操作系统发展史

操作系统:管理计算机上的软硬件资源,为用户提供一个交换接口

操作系统精髓与设计原理35页

(1)串行处理

(2)简单的批处理

(3)多道程序设计

(4)分时系统

3.fork复制进程

fork 是把已有的进程复制一份 , 当然把 PCB 也复制了一份 , 然后申请一个 PID, 子进程的
PID( 父进程的 )+1;
子进程的 PID= 父进程的 PID+1;
如果父子进程想要做不同的事情 , 那么我们通过返回值来判断 ;
man fork;
#include <stdio.h>
#include<assert.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>

int main()
{
    char *s=NULL;
    int n=0;//控制父子进程的次数
    
    pid_t id=fork();
    assert(id!=-1);
    
    if(id==0)//子进程
    {
        s="child";
        n=3;
    }
    else
    {
        s="parent";
        n=7;
    }
    //父子进程一起运行
    int i=0;
    for(;i<n;i++)
    {
        printf("s=%s ,pid=%d ,ppid=%d n的地址=%p n=%d\n",s,getpid(),getppid    (),&n,n);
        sleep(1);
    }
    exit(0);
}

fork是把已有的进程复制,当然把PCB复制了一份,然后申请一个PID,子进程的PID(父进程的)+1

子进程PID=父进程PID+1

如果父子进程想要做不同的事,那我们通过返回值来判断

man fork

获取进程PID 子:getpid() 父getppid()

注:程序中看到的都是逻辑地址

逻辑地址一样,所以地址一样,物理地址不一样,所以值不一样

2034是什么?bash

现有bash再有父进程再有子进程,bash是源头

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux进程的基础知识、fork复制进程 的相关文章

  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • Linux 内核使用的设备树文件 (dtb) 可视化工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以图形化表示Linux内核中使用的硬件设备树的工具 我正在尝试了解特定 Arm 芯片组
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include

随机推荐

  • 剑指offer——连续子数组的最大和

    题目链接 https www nowcoder com practice 459bd355da1549fa8a49e350bf3df484 tpId 13 tqId 11183 rp 1 ru 2Factivity 2Foj qru 2Ft
  • -------Python中ConfigArgParse模块介绍---------

    来源 https pypi org project ConfigArgParse import configargparse p configargparse ArgParser default config files etc app c
  • 生信学习——R语言小作业-中级(附详细答案解读)

    题目目录 1 请根据R包org Hs eg db找到下面ensembl 基因ID 对应的基因名 symbol 2 根据R包hgu133a db找到下面探针对应的基因名 symbol 3 找到R包CLL内置的数据集的表达矩阵里面的TP53基因
  • 从零开始自动化测试框架设计:自动化测试环境搭建一:eclipse+svn+selenium+Junit+maven

    本机环境 window7 旗舰版 Service Pack 1 64位操作系统 一 安装JDK 官网下载jdk1 6 0 17或以上版本 本人用的是jdk1 6 0 17 下载完后安装在C盘根目录C jdk1 6 0 17 配置系统环境变量
  • Linux装好后,ping不通Windows默认网关及ip地址,原因是Linux网络未配置好,解决linux网络连接问题

    1 解决Linux网络连接问题 1 第一步 首先打开图形化界面 右键选择打开终端 打开控制台ping一下Windows连接网络的网关地址或者IP地址 如图 ping 192 168 113 1 这是本人Windows操作系统中连接网络的网关
  • 软件测试Bug的四种级别

    软件测试的四种Bug级别 1 致命 常规操作引起的系统崩溃 死机 死循环 造成数据泄露的安全性问题 对用户财产造成损失 2 严重 重要功能未实现 非常规操作导致的系统崩溃 死机 死循环 外观难以接受的缺陷 常见安全隐私类问题 例如 密码明文
  • 程序中出现net.ERR_UNKNOWN_URL_SCHEME 是什么原因?

    这个错误通常是因为你在程序中使用了一个无效的 URL 地址 具体来说 它缺少了协议头 例如 http 或 https 你应该检查你的代码 确保 URL 地址是正确的 并且包含了合法的协议头 例如 如果你的代码中有这样一行 const url
  • 一个转为爬虫设计的浏览器,修改chromnium代码,无视画布指纹追踪,webrtc泄露IP,支持selenium驱动,删除webdriver属性,修改event的isTrusted属性

    闲言碎语 做爬虫的都知道canvs font webgl等指纹 我个人感觉 代码1 这些除了canvs font webgl之外没啥大用 同样安装谷歌浏览器的 你有我也有 厂商无法当作指纹唯一的标准 前几天遇到携程这种的 连续获取你几遍画布
  • TL431 三端可控精密稳压器

    1 TL431是三端可控精密稳压源 有插件TO 92和贴片SOT 23 3两种常用的封装 如图1 图2 图4 图5 它由三个脚 分别是R 参考极 A 阳极 K 阴极 组成 TL431的内部参考电压是2 5V 2 TL431通常结合光耦进行反
  • Python系列-17]:人工智能 - 数学基础 -7- 微积分、导数与极值、梯度下降法

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119325116 目录 第1章
  • 阿里云备案成功的域名能用腾讯云的服务器吗?

    必须可以 只需要操作一步 那就是备案转接入 工信部规定 域名只需要备案一次 但可以接入多次 每新增一个平台的解析 就必须增加备案转接入 所以任何平台都可以用 只需要做一步 那就是转接入 首次备案需要经过云平台初审加管局审核 通常需要十五个工
  • win10默认浏览器里多余了一个无效选项

    到注册表里删除以下位置里的无效项 HKEY CURRENT USER SOFTWARE Clients StartMenuInternet HKEY LOCAL MACHINE SOFTWARE Clients StartMenuInter
  • C++ 运算符

    运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号 C 提供了以下类型的运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 算术运算符 下表显示了 C 支持的所有算术运算符 假设变量 A 的值为 10 变
  • java反射

    文章目录 1 反射的缘起 1 1 什么是反射及反射机制 1 2 为什么会产生反射 1 反射的缘起 1 1 什么是反射及反射机制 反射就是把java类中的各个成分 构造器 属性 方法 映射成一个个的java对象 即在运行状态中 1 对于任意一
  • ThreadLocal的使用

    一 介绍 ThreadLocal的官方解释 ThreadLocal 是线程的局部变量 是每一个线程所单独持有的 其他线程不能对其进行访问 通常是类中的 private static 字段 是一个以ThreadLocal对象为键 任意对象为值
  • AD多张原理图元件自动标号

    首先新建工程 包含两张以上原理图 将原理图先画好 不需要标注 然后在任意原理图界面使用快捷键TAA 上图中箭头所指则为需要更改部分 1 处理顺序是选择你的元件标注顺序 一般从上往下 从左往右即可 2 原理图页标注栏中的顺序是指先标注哪张原理
  • mysql 关联删除_mysql如何删除关联表

    mysql数据库中 表与表之间进行关联之后 就不可随意的进行删除操作 否则会影响所有关联表之间的结构 那么如何安全的删除关联表呢 让我们来了解一下 mysql使用drop命令删除关联表 方法为 1 删除表的外键约束 外键是一个特殊字段 其将
  • python retrying_python自动重试第三方包retrying模块的方法

    retrying是一个python的重试包 可以用来自动重试一些可能运行失败的程序段 retrying提供一个装饰器函数retry 被装饰的函数就会在运行失败的情况下重新执行 默认只要一直报错就会不断重试 最近写了一个爬虫 需要连接国外的一
  • 【C++】一文解析std::binary_function、std::bind1st、std::bind2nd、std::bind

    STL中有一个叫做 适配器 的概念 它指的是某些函数可能定义了两个形参 但是某些算法需要的函数却有时候需要一个形参 那么就需要对其进行适配 将原本只需要两个参数的函数转变成需要1和参数就能正常运行的函数 就像你为你的笔记本充电 能直接一根火
  • Linux进程的基础知识、fork复制进程

    目录 1 进程的基础知识 1 进程 2 PCB 3 进程的状态 4 并发与运行 2 操作系统发展史 3 fork复制进程 1 进程的基础知识 1 进程 一个正在运行的程序 2 PCB 进程控制块 进程控制块是用一个结构体struct tas