【shell笔记>子shell】:理解子shell

作者: 王诗翔 | 来源:发表于2017-06-29 14:57 被阅读118次

2017.6.26

ps -f命令能够表现子shell的嵌套关系。

添加;来分隔命令可以指定依次运行的一系列命令。

不过这一系列命令并不是进程列表,命令列表想要成为进程列表,这些命令必须包含在括号里。

echo $BASH_SUBSHELL返回为0表明没有子shell,返回为1或更大的数,说明存在。

子shell用法

探索后台模式

&字符会让进程被置于后台:

wsx@wsx-ubuntu:/etc$ sleep 3000& # sleep命令会在后台睡眠3000秒
[1] 10469           # 返回两条信息,方括号内是后台作业号,后者显示作业的进程ID
wsx@wsx-ubuntu:/etc$ ps -f  # ps命令用来显示各种进程
UID        PID  PPID  C STIME TTY          TIME CMD
wsx      10304 10299  0 19:21 pts/0    00:00:00 bash
wsx      10317 10304  0 19:21 pts/0    00:00:00 bash
wsx      10327 10317  0 19:21 pts/0    00:00:00 bash
wsx      10469 10327  0 19:28 pts/0    00:00:00 sleep 3000
wsx      10470 10327  0 19:28 pts/0    00:00:00 ps -f
wsx@wsx-ubuntu:/etc$ jobs  # 也可以通过jobs命令来显示后台作业信息
[1]+  运行中               sleep 3000 &

jobs命令在方括号内显示出作业号,还显示了作业的当前状态以及对应的命令。

将进程列表置于后台

wsx@wsx-ubuntu:/etc$ (sleep 2; echo $BASH_SUBSHELL; sleep 2) &
[2] 10729
wsx@wsx-ubuntu:/etc$ 1

[2]+  已完成               ( sleep 2; echo $BASH_SUBSHELL; sleep 2 )

在CLI中运行子shell的创造性方法之一就是将进程列表置于后台模式。既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。

协程

协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。

要进行协程处理,得使用coproc命令,还有要在子shell中执行的命令。比如

wsx@wsx-ubuntu:/etc$ coproc sleep 10
[2] 11026

除了会创建子shell之外,协程基本上就是将命令置入后台模式。jobs可以显示作业信息。

可以将协程与进程列表结合起来产生嵌套的子shell。

wsx@wsx-ubuntu:~$ coproc ( sleep 10; sleep 2 )
[1] 3438
wsx@wsx-ubuntu:~$ jobs
[1]+  运行中               coproc COPROC ( sleep 10; sleep 2 ) &
wsx@wsx-ubuntu:~$ ps --forest
  PID TTY          TIME CMD
 3420 pts/1    00:00:00 bash
 3438 pts/1    00:00:00  \_ bash
 3439 pts/1    00:00:00  |   \_ sleep
 3440 pts/1    00:00:00  \_ ps

相关文章

  • 【shell笔记>子shell】:理解子shell

    2017.6.26 ps -f命令能够表现子shell的嵌套关系。 添加;来分隔命令可以指定依次运行的一系列命令。...

  • Shell编程-13-子Shell和Shell嵌套

    什么是子Shell     子Shell的概念其实是贯穿整个Shell的,如果想要更好的理解和写Shell脚本则必...

  • Linux环境变量

    一、子shell 1、子shell,即从当前shell环境新开一个shell环境,这个新开的shell环境就称为子...

  • 第五章 理解shell

    本章内容: 1)探究shell类型2)理解shell的父/子关系3)别出心裁的子shell用法4)探究内建的she...

  • 启动ssh-agent

    方式一:创建子shell,在子shell中运行ssh-agent进程,退出子shell自动结束代理。 方式二:单独...

  • 进程(六):子 Shell

    子 Shell 是由 Shell 或 Shell 脚本运行的子进程。当我们在 Shell 命令行提示符下,运行一个...

  • 关于"子"shell与子shell

    在第二周课程中,老师说到使用小括号(list)可以调出子shell,并举了以下例子: 这个例子很好理解:在当前sh...

  • Shell十三问 学习笔记

    文本处理 Shell脚本编程 Shell 十三问 学习笔记 shell and Carriage 关系 Shell...

  • bash环境配置文件

    longin shell 输入用户名密码取得的bash nologin shell bash的子进程 ./etc/...

  • linux shell脚本攻略笔记

    LINUX SHELL脚本攻略笔记[速查] linux shell脚本攻略笔记

网友评论

  • 忘_了:我记得ps好像是查看进程的
    忘_了: @王诗翔 😂 我是没看懂你的专业术语,查看子shell
    王诗翔:详细显示进程信息,你可以对比下面的输出。

    wsx@wsx-ubuntu:~$ ps
    PID TTY TIME CMD
    6718 pts/8 00:00:00 bash
    6728 pts/8 00:00:00 ps
    wsx@wsx-ubuntu:~$ ps -f
    UID PID PPID C STIME TTY TIME CMD
    wsx 6718 3415 0 17:54 pts/8 00:00:00 bash
    wsx 6731 6718 0 17:54 pts/8 00:00:00 ps -f
  • 忘_了:还是不懂ps -f干啥的。。。能举个简单的例子吗?

本文标题:【shell笔记>子shell】:理解子shell

本文链接:https://www.haomeiwen.com/subject/rdimcxtx.html