深入理解Linux进程

news2024/9/24 19:16:37

进程参数和环境变量的意义

  1. 一般情况下,子进程的创建是为了解决某个问题。那么解决问题什么问题呢?这个就需要进程参数和环境变量来进行决定的。

  1. 子进程解决问题需要父进程的“数据输入”(进程参数 & 环境变量)

  1. 设计原则:3.1 子进程启动的时候,必然用到的参数使用进程参数传递 3.2子进程解决问题可能用到的参数使用环境变量传递

  1. 父进程 ====>(进程参数/环境变量) ===> 子进程

子进程是如何将结果返回给父进程?

我们知道父进程创建子进程是为了解决问题的,那么这个解决问题的结果需要返回给父进程吗?当然需要!先看看一下一个简单的demo

#include <stdio.h>

int main(int argc,char* argv[])
{
    printf("Test:: Hello World\n");

    return 19;
}

父进程自己解决问题不就行了吗?为什么还要创建子进程来解决问题呢?

深入理解父子进程

  1. 子进程的创建是为了并行的解决子问题(问题分解)

  1. 父进程需要通过子进程的结果最终解决问题(并获取问题)

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *wstatus);
1.等待一个子进程完成,并返回子进程标识和状态信息
2.当有多个子进程完成,随机挑选一个子进程返回
pid_t waitpid(pid_t pid, int *wstatus, int options);
1.可等待特定的子进程或者一组子进程
2.在子进程还未终止时,可以通过options设置不必等待(直接返回)

#include <unistd.h>
void _exit(int status); //系统调用,终止当前进程

#include <stdlib.h>
void exit(int status);//库函数,先做资源清理,再通过系统调用(_exit)终止进程
void abort(void); //异常终止当前进程(通过产生SIGABRT信号终止)
                  //信号可以理解为:操作系统发送给进程的通知。

接下来来看一下dmeo。

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

int main(int argc,char* argv[])
{
    pid_t pid=0;
    int a=1;
    int b=0;
    int status=0;

    printf("parent = %d\n",getpid());

    if((pid = fork()) == 0) exit(-1);

    printf("child = %d\n",getpid());

    if((pid = fork()) == 0) abort();

    printf("child = %d\n",getpid());

    if((pid = fork()) == 0) a=a/b,exit(1);

    printf("child = %d\n",getpid());

    sleep(3);

    while((pid = wait(&status)) > 0)
    {
        printf("child:%d,status=%x\n",pid,status);
    }


    return 19;
}

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

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

相关文章

项目实战典型案例6——没有复用思想

这里写目录标题一&#xff1a;背景介绍反例思路&方案反例一的优化思路和方案反例一优化的模拟代码测试优化之前的缺点与优化之后的优点反例二的优化思路和方案反例二优化的模拟代码测试优化之前的缺点与优化之后的优点四&#xff1a;总结一&#xff1a;背景介绍 本篇博客是…

Spring Boot统一功能处理

目录 一、统一用户登录权限验证 1.1 自定义拦截器 1.2 将自定义拦截器加入到系统配置 1.3 统一访问前缀 二、统一异常处理 三、统一数据格式返回 一、统一用户登录权限验证 1.1 自定义拦截器 拦截器是一个普通的类&#xff0c;需要实现HandlerInterceptor接口并重写pre…

centos安装docker,docker-cpmpose教程及疑难解决

1、安装dockeryum -y install docker出现完毕&#xff08;complete&#xff09;则表示安装完成2、启动docker服务systemctl start docker报错如下&#xff0c;让通过 systemctl status docker.service 和 journalctl -xe 命令查看详情输入systemctl status docker.service&…

在ROS2中,通过MoveIt2控制Gazebo中的自定义机械手

目前的空余时间主要都在研究ROS2&#xff0c;最终目的是控制自己用舵机组装的机械手。 由于种种原因&#xff0c;先控制Gazebo的自定义机械手。 先看看目前的成果 左侧是rviz2中的moveit组件的机械手&#xff0c;右侧是gazebo中的机械手。在moveit中进行路径规划并执行后&#…

RolePred: Open-Vocabulary Argument Role Prediction for Event Extraction 论文解读

Open-Vocabulary Argument Role Prediction for Event Extraction 论文&#xff1a;2211.01577.pdf (53yu.com) 代码&#xff1a;yzjiao/RolePred: Source code for EMNLP findings paper “Open-Vocabulary Argument Role Prediction for Event Extraction” (github.com) 期…

优思学院|我们的企业面对哪些危机?六西格玛如何处理这些危机?

如果你在某公司买到的产品经常出现问题&#xff0c;你还会再去买他们的产品吗&#xff1f;如果某公司为你提供的服务经常不如你所预期&#xff0c;你还会再次使用他们的服务吗&#xff1f; 六西格玛管理是以客户为中心&#xff0c;透过六西格玛的工具和方法&#xff0c;针对问…

【黑马】Java基础从入门到起飞目录合集

视频链接&#xff1a; Java入门到起飞&#xff08;上部&#xff09;&#xff1a;BV17F411T7AoJava入门到起飞&#xff08;下部&#xff09;&#xff1a;BV1yW4y1Y7Ms 学习时间&#xff1a; 2023/02/01 —— 2023/03/09断断续续的学习&#xff0c;历时大概37天&#xff0c;完结撒…

php+bootstrap+jquery+mysql实现购物车项目案例

获取源码 一键三连后&#xff0c;评论区留下邮箱安排发送&#xff1a;&#xff09; 介绍 使用php,bootstrap,jquery,mysql实现的简易购物车案例。 通过本案例&#xff0c;你将学习到以下知识点&#xff1a; php 操作 mysql 实现增删改查掌握 php 常用数组函数掌握 php $…

HBase 2.x核心技术

HBase 2.x主要包含以下核心功能&#xff1a; 1、基于Procedure v2重新设计了HBase的Assignment Manager和核心管理流程。通过Procedure v2&#xff0c;HBase能保证各核心步骤的原子性&#xff0c;从设计上解决了分布式场景下多状态不一致的问题。 2、实现了In Memory Compactio…

Chapter2.2:线性表的顺序表示

该系列属于计算机基础系列中的《数据结构基础》子系列&#xff0c;参考书《数据结构考研复习指导》(王道论坛 组编)&#xff0c;完整内容请阅读原书。 2.线性表的顺序表示 2.1 顺序表的定义 线性表的顺序存储亦称为顺序表&#xff0c;是用一组地址连续的存储单元依次存储线性表…

脑机接口科普0017——飞米

本文禁止转载&#xff01;&#xff01;&#xff01;&#xff01; 在我们的九年制义务教育体系中&#xff0c;我们知道纳米是个很小的单位&#xff0c;一般进行单位制的转换的时候&#xff0c;最小就只能到达纳米级别了。 1nm 10^-9 m 这会给学生造成一种误解。认为纳米就是…

搭建兰空图床(Lsky Pro)-docker

兰空图床(Lsky Pro) 官方网站&#xff1a;https://www.lsky.pro/ GitHub&#xff1a;https://github.com/lsky-org/lsky-pro 一, 安装docker-compose 下载-授权 #下载 国内地址 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-una…

dl----算法常识100例

1.depthwise卷积&&Pointwise卷积 depthwise与pointwise卷积又被称为Depthwise Separable Convolution&#xff0c;与常规卷积不同的是此卷积极大地减少了参数数量&#xff0c;同时保持了模型地精度&#xff0c;depthwise操作是先进行二维平面上地操作&#xff0c;然后利…

nginx的学习

1. 我们今天的目标是学习 了解认识nginx的基本结构和语法学习经典案例 2. Nginx是什么 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;Nginx是由俄罗斯的人开发的&#xff0c;因它的稳定性、丰富的功能集…

爬虫(二)解析数据

文章目录1. Xpath2. jsonpath3. BeautifulSoup4. 正则表达式4.1 特殊符号4.2 特殊字符4.3 限定符4.3 常用函数4.4 匹配策略4.5 常用正则爬虫将数据爬取到后&#xff0c;并不是全部的数据都能用&#xff0c;我们只需要截取里面的一些数据来用&#xff0c;这也就是解析爬取到的信…

通过测试驱动开发(TDD)的方式开发Web项目

最近在看一本书《Test-Driven Development with Python》&#xff0c;里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目。刚好这本书中使用了我之前所了解的一些技术&#xff0c;Django、selenium、unittest等。所以&#xff0c;读下来受益匪浅。 我相…

NFT的前景,元宇宙的发展

互联网的普及和数字技术的广泛应用&#xff0c;成为消费升级的新动力&#xff0c;在不断创造出更好的数字化生活的同时&#xff0c;也改变了人们的消费习惯、消费内容、消费模式&#xff0c;甚至是消费理念&#xff0c;数字经济时代的文化消费呈现出新的特征。 2020年有关机构工…

性能优化的核心思路

性能优化的本质是良好的用户体验和有限的资源之间的矛盾。核心思路【1】堆硬件 优化软件&#xff08;算法、步骤&#xff09;【2】开源&#xff08;堆机器&#xff09; 节流&#xff08;提高资源利用率&#xff0c;少占资源&#xff09;【3】输入、计算、输出【4】权衡核心思想…

谷粒学院开发(二):教师管理模块

前后端分离开发 前端 html, css, js, jq 主要作用&#xff1a;数据显示 ajax后端 controller service mapper 主要作用&#xff1a;返回数据或操作数据 接口 讲师管理模块&#xff08;后端&#xff09; 准备工作 创建数据库&#xff0c;创建讲师数据库表 CREATE TABLE edu…

git 当有人邀请你加入项目(gitee)

第一步&#xff0c;找到仓库地址 https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git 2&#xff0c;打开git bush git clone https://gitee.com/xxxxxxxxxxxxxxxx/abcd.git 这条命令新建一个名为abcd&#xff08;也就是项目目录结尾…