shell 创建子进程及并行延时执行命令方法

news2024/11/19 1:28:46

shell 创建子进程方法

1. 什么是shell子进程

子进程,是从父子进程的概念出发的,unix操作系统的进程从init进程开始(init进程为1,而进程号0为系统原始进程,以下讨论的进程原则上不包括进程0)均有其对应的子进程,就算是由于父进程先行结束导致的孤儿进程,也会被init领养,使其父进程ID为1。
也因为所有的进程均有父进程,事实上,所有进程的创建,都可视为子进程创建过程。在apue一书里提及unix操作系统进程的创建,大抵上的模式都是进行fork+exec类系统调用。
理解子进程的创建执行,需要至少细分到二个步骤,包括
1) 通过fork创建子进程环境,
2) 通过exec加载并执行进程代码。
而shell子进程(以下均称subshell),顾名思义,就是由“当前shell进程”创建的一个子进程

2. shell什么情况下会产生子进程

2.1 提交后台作业 &

command &

2.2 管道 |

command1 | command2

2.3 括号命令列表 ()

(cmd1;cmd2;cmd3)

2.4 执行外部脚本、程序

bash ./test.sh

说明:大致上子进程的创建包括以上四种情况了。需要说明的是只要是符合上边四种情况之一,便会创建(fork)子进程,不因是否是函数,命令,或程序,也不会因为是内置函数(buitin)或是外部程序。
shell中有一个变量 BASH_SUBSHELL 可以查看子 shell 的信息,该变量的初始值为0,每启动一个子 shell 该变量就会自动加1。
由下面的案例可以看到bash_subshell在子进程中的值是1,可以确定()开启了子进程。

[root@imx6sabresd ~]# cat test.sh 
#!/bin/bash
# 功能描述:子Shell演示示例
# 父Shell
#set -x
hi="parent shell"
echo "+++++++++++++"
echo -e "\033[31m+ 父Shell +\033[0m"
echo "+++++++++++++"
echo "PWD=$PWD"
echo "PID=$$"
echo "bash_subshell=$BASH_SUBSHELL"
# 通过()开启子Shell
(
sub_hi="subshell"
echo -e "\t+++++++++++++"
echo -e "\t\033[33m+ 子Shell +\033[0m"
echo -e "\t+++++++++++++"
echo -e "\tPWD=$PWD"
echo -e "\tPID=$$"
echo -e "\tbash_subshell=$BASH_SUBSHELL"
echo -e "\thi=$hi"
echo -e "\tsubhi=$sub_hi"
cd /opt;echo -e "\tPWD=$PWD"
)
# 返回父Shell
echo "+++++++++++++++++"
echo "+ 返回父Shell +"
echo "+++++++++++++++++"
echo "PWD=$PWD"
echo "hi=$hi"
echo "sub_hi=$sub_hi"
echo "bash_subshell=$BASH_SUBSHELL"

结果如下:子进程方法
在这里插入图片描述

3.使用括号来创建子进程

例子:
如果在脚本中加入一个延时执行程序,并发执行,不想要影响源程序执行,可以引入括号

echo "start"
(sleep 5
echo "hello world") &
echo "1"
sleep 1
echo "2"
sleep 1
echo "3"
sleep 1
echo "4"
sleep 0.5
echo "4.5"

结果如下:
在这里插入图片描述
参考链接:https://zhuanlan.zhihu.com/p/543308214

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

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

相关文章

POI通过模板导出excel(包含表头合并处理)

最近接触到比较多poi相关的需求,总结一下通过模板导出以及表头合并的一些复杂情况处理。 简单使用的话可以参考下我之前写的 POI实现导入导出excel 目录:1、POI通过模板导出2、POI表头合并处理1、POI通过模板导出 其实通过模板导出的原理,无…

2021 年年度最佳开源软件

Svelte https://svelte.dev/ Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程序的编译阶段来处理。 与使用虚拟(virtual)DOM 差异对比不同。Svelte 编写的…

DAla-Gly-Gly,77286-90-9

Substrate for bacterial D-aminopeptidases.细菌d -氨基肽酶的底物。 编号: 191616中文名称: 三肽DAla-Gly-Gly英文名: DAla-Gly-GlyCAS号: 77286-90-9单字母: H2N-DAla-GG-OH三字母: H2N-DAla-Gly-Gly-COOH氨基酸个数: 3分子式: C7H13N3O4平均分子量: 203.2精确分子量: 203.0…

虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台

工信部《虚拟现实产业发展白皮书 5.0 》中明确提出:“通过财政资金促进虚拟现实技术产业化,支持面向工业、文化、教育等重点行业的虚拟现实技术应用”。 虚拟现实 VR 技术以用户体验视角为中心,跟踪反馈在 3D 场景中的动作,借助软…

kali工具学习

目录 1.waybackurls 网络爬虫,url搜索 2.wafw00f 检测网站用了什么waf 3.theHarvester ip、邮箱、host搜集 4. oneforall 子域名搜集 5. nmap kali自带的扫描工具 6. whatweb 指纹查询 1.waybackurls 网络爬虫,url搜索 2.wafw00f 检测网…

阿里巴巴注册中心nacos

目录 一、配置中心介绍 1、Spring Cloud Config 2、Nacos替换Config (1)应用场景 二、读取Nacos配置中心的配置文件 1、在Nacos创建统一配置文件 2、以service-statistics模块为例 3、补充:springboot配置文件加载顺序 三、名称空间…

网络实验之VRRP协议

一、VRRP协议简介 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议。VRRP是一种路由容错协议,也可以叫做备份路由协议。一个局域网络内的所有主机都设置缺省路由&…

MySQL入门阶段这一篇就够了-学习笔记(手敲1.5万字)

前言 虽然在大一下学期,就已经接触到了MySQL,但是那个时候只是会用MySQL进行增删改查,在大三上学期,尝试投简历寻找实习时,对方公司对于程序员的MySQL水平有很高的要求,所以我开始系统化的学习MySQL。顺便…

想写出复用性强的组件?快来试试 Storybook 吧

简介 Storybook 是 UI 组件的开发环境,它允许开发者浏览组件库,查看每个组件的不同状态,以及交互地开发和测试组件。 Storybook 可帮助你记录组件以供重用,并自动对组件进行可视化测试以防止出现错误。 开始 在对 Storybook 有…

halcon measure_pos和measure_pairs详解

这两个算子作为halcon一维测量的关键,看了这两个算子的多个博客,也没搞清楚里面几个参数的意义和测量的原理,决定自己详细试一下,将测试的过程详细记录下来,供以后需要参考的朋友使用,本文将从以下几个点说…

使用bat脚本运行python脚本,bat出现闪退,怎么解决?

前言 本文是该专栏的第4篇,后面会持续分享python的各种干货知识,值得关注。 工作上为了方便,很多时候我们会设置一个bat脚本来双击运行python脚本,这样既方便又能在工作上节约大量时间。 但是,你或许会碰到这样的情况,当双击bat脚本的时候,bat窗口界面会直接出现闪退关…

DM8设置自动备份,达梦数据库,自动备份。详细步骤。常用命令,启动关闭数据库,查看DMAP状态

常用命令 DmServiceDAMENG.service改成自己bin目录下文件名 运维常见问题,官方文档 注意事项 登录客户端工具,一定要使用SYSDBA用户进行下面的客户端操作 登录数据库主机,一定要使用安装数据库时创建的dmdba用户 定时备份前请先配置本地…

引入新模块都在用这个注解,它是如何生效的?|原创

本文讲解了Enable 类注解是如何生效的以及其核心注解 Import 的原理,并且用 EnableAsync 注解来举例。点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达在项目开发的过程中,我们会遇到很多名字为 Enablexxx 的注解&a…

OA系统解决方案

一、OA系统解决方案介绍 OA系统,即办公自动化系统(Office Assistant简称OA),它是一个集成了企业信息发布、公文与信息管理、公文处理、知识管理、内部通讯、协同办公等办公与管理应用功能一体的协同 办公系统。OA系统解决方案则是…

Linux——详解共享内存shared memory

目录 一.共享内存介绍 (一).什么是共享内存 (二).共享内存优点 (三).共享内存缺点 二.共享内存使用 (一).创建—shmget ①key ②size ③shmflg ④返回值 (二&…

CRMEB电商商城系统腾讯云ECS服务器安装配置搭建教程文档

一、推荐使用宝塔Linux面板,简单好用。二、放行服务器端口。详细步骤: 1.登录腾讯云服务器,点击右上角“控制台” 2.我的资源,点击进入云服务器 3.进入实例列表,选择您要安装的服务器,点击更多 4.选择重装…

Hadoop 如何保证自己的江湖地位?Yarn 功不可没

前言 任何计算任务的运行都离不开计算资源,比如 CPU、内存等,那么如何对于计算资源的管理调度就成为了一个重点。大数据领域中的 Hadoop 之所以一家独大,深受市场的欢迎,和他们设计了一个通用的资源管理调度平台 Yarn 密不可分&a…

Metal每日分享,四维向量偏移滤镜效果

本案例的目的是理解如何用Metal实现图像4维向量颜色效果滤镜,通过对像素点颜色进行4维向量叠加运算得到新的像素点; Demo HarbethDemo地址实操代码 // 暖色系 let filter = C7ColorVector4(vector: Vector4.Color.warm)// 方案1: ImageView.image = try? BoxxIO(element: o…

浅谈字节码增强技术系列1-字节码增强概览

作者:董子龙 前言 前段时间一直想参照lombok的实现原理写一篇可以生成业务单据修改记录插件的专利,再查阅资料的过程中,偶然了解到了字节码增强工具-byteBuddy。但是由于当时时间紧促,所以没有深入的对该组件进行了解。其实再我…

一文搞定Pandas核心概念之DataFrame

DataFrame概述 DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索…