标签:列表 模式 EOS 执行 img 有一个 linx 文件中 root
每个用户的登陆自动启动的 Shell 在 /etc/passwd
文件中定义。例如我们可以使用 cat /etc/passwd
命令查看 root 用户在配置文件中配置默认启动的 Shell。从下图中可以看到,root 用户默认启动的 Shell 是 /bin/bash
这个 Shell。
在父 Shell 中执行 /bin/bash
命令会打开一个新的子 Shell,再执行命令的话就是在子 Shell中执行的。首先在当前 Shell 中执行 /bin/bash
,然后再执行 ps --forest
命令查看进程关系,可以看到如下结果。这里显示有两个 Shell,它们的关系是父子关系,同时在子 Shell 中有一个 ps 进程,它是子 Shell 的子进程。可以使用 exit
命令退出当前 Shell,若当前 Shell 为登陆时创建的 Shell,则会退出登陆。
使用小括号包裹一组命令可以使该组命令成为进程列表,即启动一个子 Shell 来执行这组命令。可以通过命令 echo $BASH_SUBSHELL
来判断是否有子 Shell 生成。该命令返回 0 则表明没有子 Shell 生成;如果返回 1 或者更大值,则表明有子 Shell 生成。例如下面的命令 (pwd; echo $BASH_SUBSHELL)
。它的返回值为 1 。表明有一个子 Shell。
将进程置于后台模式,可以在子 Shell 中处理繁重的工作,同时不会让子 Shell 的 IO 受制于终端。例如利用 (tar -cf testuser.tar /home/testuser; tar -cf root.tar /home/root)&
后台进程创建备份文件。
使用协程。协程可以同时做两件事。它在后台生层一个子 Shell,并在这个子 Shell 中执行命令。
# 启动一个协程
coproc cat
# 往协程输入数据
echo "hello" >& ${COPROC[1]}
# 读取协程的输入数据
read -u "${COPROC[0]}" a
# 显示读取数据
echo $a
[1] : Linux 命令行和 Shell 脚本编程大全
[2] : Is coproc command the same as command &?
[3] : Bash编程之协作进程coproc
标签:列表 模式 EOS 执行 img 有一个 linx 文件中 root
原文地址:https://www.cnblogs.com/sparkchan/p/12686567.html