shell什么情况下会产生子进程麻烦告诉我

shell什么情况下会产生子进程麻烦告诉我,第1张

以下几个创建子进程的情况。(以下英文摘自info bash)1:&,提交后台作业If a command is terminated by the control operator `&', the shell executes the command asynchronously in a subshell.2:管道 Each command in a pipeline is executed in its own subshell3:括号命令列表 () *** 作符 Placing a list of commands between parentheses causes a subshell environment to be created4:执行外部脚本程序:When Bash finds such a file while searching the `$PATH' for a command, it spawns a subshell to execute it. In other words, executing filename ARGUMENTS is equivalent to executing bash filename ARGUMENTS 说明:大致上子进程的创建包敏如括以颂拿散上四种情况了。shell做为解释语言程序,提供给第二步exec加载和执行的程序体并不是脚本本身,而是由第一行#!指定的,默认为shell程序,当然也可以是awk,sed等程序.shell同时提供二种不创建子程序的进程创建方式 1:source命令,使用方法Source filename ARGUMENTS或. filename ARGUMENTS 此种方法,直接在当前shell进程野氏中执行filename脚本,filename结束后继续返回当前shell进程2:exec命令,使用方法Exec filename ARGUMENTS此种方法直接在当前shell进程中执行filname脚本,filename结束后退出当前shell进程

运维

Linux系统进程控制

行者111111111111111

原创

关注

0点赞·3人阅读

1、进程创建

shell命令行启动程序指令皆是创建了进程,我们通常通过调用fork()函数创建子进程。

1.1、fork()函数用法简介

调用fork后, *** 作系统内核将:

分配新的内存块和内核数据结构给子进程

将父进程部分数据结构内容拷贝喊余正至子进程

添加子进程到系统进程列表郑悔当中

fork返回,开始调度器调度

1.2、fork函数返回值

子进程返回0,父进程返回的是子进程的pid

原因:fork之后进入内核,申请内存构建子进程PCB、虚拟内存、页表,将子进程设置R状态,放入调度队列,由于创建子进程之后父子进程共享代码,所以父子进程都会有return返回值。返回值返回给变量本质发生了写时拷贝,改变了子进程对应页表的指向,数据映射到了其他区域

1.3、写时拷贝

由于进程要独立,代码不可修改,数据可改,所以默认数据各有一份,但是内存是有限度的,如果把父进程数据全部毁枣再拷贝一份,那么太浪费内存,甚至导致fork失败。通常通过写时拷贝实现,就是当父或子进程修改数据时,将要修改的数据拷贝一份,让子进程页表指向新的重复数据在发生修改

Linux下可以有两种方式执行Shell脚本:

1、用shell程序执行脚本:根据shell脚本的类型,选择shell程序,常用的有sh,bash,tcsh等(一般来说第一行#!/bin/bash里面指明了shell类型的衫搏,比如#!/bin/bash指明是bash,#!/bin/sh则是sh);然后改塌答输入命令(其中bash为shell的名称核慧,myshell.sh则为要执行的代码):

bash myshell.sh

2、直接执行脚本:

不过首先的加上可执行权限(也许要root权限,4情况而定),执行:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12548003.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存