美文网首页
2021-12-23,Linux学习记录

2021-12-23,Linux学习记录

作者: 人字拖拖不下来 | 来源:发表于2021-12-23 15:39 被阅读0次

    1.子进程和协程

    1.子进程:

    执行下面这两行命令是不一样的结果,括号的加入使命令列表变成了进程列表,生成了一个子shell来执行对应的命令.
    $ pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls;
    $ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls)

    想知道是否生成了子shell(现在生成的子shell的个数),得借助一个使用了环境变量的命令:
    echo $BASH_SUBSHELL

    2.协程

    协程可以同时做两件事。它在后台生成一个子shell,并在这个子shell中执行命令。要进行协程处理,得使用coproc命令,加要在子shell中执行的命令.例如:
    $ coproc sleep 10
    除了会创建子shell之外,协程基本上就是将命令置入后台模式。当输入coproc命令及其参数之后,你会发现启用了一个后台作业。屏幕上会显示出后台作业号(1)以及进程ID

    可以使用命令的扩展语法自己设置这个名字。
    $ coproc My_Job { sleep 10; }

    可以发挥才智,将协程与进程列表结合起来产生嵌套的子shell。只需要输入进程列表,然后把命令coproc放在前面就行了。
    $ coproc ( sleep 10; sleep 2 )
    使用ps --forest看进程的从属关系

    image.png
    但生成子shell的成本不低,而且速度还慢。创建嵌套子shell更是火上浇油!

    2.外部命令和内建命令

    1.外部命令

    有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中。ps就是一个外部命令。你可以使用which和type命令找到它。

    当外部命令执行时,会创建出一个子进程。这种操作被称为衍生(forking)。外部命令ps很方便显示出它的父进程以及自己所对应的衍生子进程。

    image.png
    可以看到ps -f的PPID是 -bash的PID,也就是说ps -f-bash的子进程,是ps -f-bash衍生的

    2.内建命令

    内建命令和外部命令的区别在于前者不需要使用子进程来执行。它们已经和shell编译成了一体,作为shell工具的组成部分存在。不需要借助外部程序文件来运行。
    cd和exit命令都内建于bash shell。可以利用type命令来了解某个命令是否是内建的。

    $ type cd
    cd is a shell builtin
    $ type exit
    exit is a shell builtin

    对于有多种实现的命令,如果想要使用其外部命令实现,直接指明对应的文件就可以了。
    例如,要使用外部命令pwd,可以输入/bin/pwd。

    3.一些Linux小技巧

    1.输入!!,然后按回车键就能够唤重新使用刚刚用过的那条命令
    2.history -a或-w: 把缓存中的输入历史写入 ~/.bash_history中

    1. !$
      查看网卡配置文件内容
      [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
      下面的'!$'代表上一条命令的最后一个参数,也就是/etc/sysconfig/network-scripts/ifcfg-eth0
      [root@localhost ~]# vi !$

    参考文献:

    Linux命令行与shell脚本编程大全.第3版(布鲁姆,布雷斯纳汉)

    相关文章

      网友评论

          本文标题:2021-12-23,Linux学习记录

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