文章目录
1. 查看进程的父子关系
1.1 使用 ps -ef --forest
-
功能:
ps -ef --forest
用于以树形结构显示系统中的进程及其父子关系,有助于理解进程的派生关系和层级结构。 -
命令详解:
ps -ef
:显示系统中所有进程的信息,包括用户、进程ID(PID)、父进程ID(PPID)、启动时间等详细内容。-forest
:以树形结构展示进程的父子关系。
-
示例:
ps -ef --forest
-
输出解释:输出结果是一个树形结构,展示每个进程及其子进程的派生关系。
1.2 子Shell与进程关系
在Bash中,执行某些命令(如括号包围的命令或执行Shell脚本)时会产生子Shell,子Shell作为新的进程与父Shell关联。
- 父子进程关系:在
ps -ef --forest
的输出中,子Shell通常显示为父Shell的子节点。 - Shell脚本:当运行一个Shell脚本时,通常会启动一个新的子Shell(例如 /bin/bash),该子Shell会执行脚本中的所有命令。
示例:
ps -ef --forest | grep bash
说明:查看当前系统中运行的所有Bash Shell及其子进程的关系。
2. 子Shell的概念与应用
2.1 子Shell的概念
-
定义:子Shell是通过在Bash中使用小括号
()
包围命令时创建的,运行在独立环境中,其执行结果不影响父Shell的环境变量或状态。 -
示例:
(pwd; echo $BASH_SUBSHELL)
- 解释:该命令会在子Shell中执行,输出当前目录路径和子Shell的层级。
2.2 多进程并行处理任务
-
并行处理:通过创建多个子Shell,可以同时执行多个任务,实现并行处理。
-
示例:
(ls; echo $BASH_SUBSHELL) & (ls; (echo $BASH_SUBSHELL)) & (ls; (pwd; (echo $BASH_SUBSHELL))) &
- 说明:通过嵌套子Shell实现并行处理,每个括号中的命令将在独立子Shell中执行,& 表示命令在后台执行,从而实现并行。
3. source
命令与子Shell的区别
3.1 source
命令
-
功能:在当前Shell环境中执行脚本,不启动新的子Shell,变量和环境变化直接影响当前Shell。
-
示例:
echo '#!/bin/bash a=1' > 1.sh source 1.sh echo $a # 输出 1,因为变量 `a` 保存在当前Shell中
- 解释:
source
在当前Shell中执行脚本,变量a
被定义在当前Shell中。
- 解释:
3.2 子Shell的区别
- 功能:通过小括号
()
或执行脚本文件,启动新的子Shell,子Shell中的环境变化不影响父Shell。
4. 重定向操作
4.1 标准输入/输出/错误流与设备
- 文件描述符:在Linux系统中,所有输入输出通过文件描述符(FD)管理。
- 主要文件描述符:
- 标准输入(STDIN):文件描述符编号0,默认设备为键盘,路径为
/dev/stdin
。 - 标准输出(STDOUT):文件描述符编号1,默认设备为显示器,路径为
/dev/stdout
。 - 标准错误输出(STDERR):文件描述符编号2,默认设备为显示器,路径为
/dev/stderr
。
- 标准输入(STDIN):文件描述符编号0,默认设备为键盘,路径为
4.2 常见重定向操作
-
重定向符号:
类型 操作符 用途 重定向输入 <
从指定文件读取输入数据,替代标准输入设备 重定向输出 >
将标准输出结果保存到指定文件,覆盖原有内容 追加输出 >>
将标准输出结果追加到指定文件的末尾,不覆盖原有内容 错误输出重定向 2>
将错误信息保存到指定文件,覆盖原有内容 追加错误输出 2>>
将错误信息追加到指定文件的末尾,不覆盖原有内容 混合输出 &>
将标准输出和标准错误输出保存到同一文件中 错误到输出重定向 2>&1
将标准错误输出重定向到标准输出
4.3 重定向示例
示例:
# 将标准输出和错误输出保存到同一文件
command &> output.txt
# 将错误输出追加到标准输出文件
command 2>> output.txt
- 解释:示例1将标准输出和错误输出重定向到一个文件中;示例2将错误输出追加到已有输出文件中(不是覆盖)。
5. 管道操作
5.1 管道操作符 |
-
功能:将一个命令的输出作为下一个命令的输入,将多个命令串联起来。
-
示例:
ps aux | wc -l
- 说明:列出所有运行的进程,并统计进程总数。
5.2 与 xargs
的结合
-
使用场景:对于复杂输出形式的命令(如
ls
、cp
、rm
),需通过xargs
处理管道输入。 -
示例:
cat /opt/1.txt | xargs rm -rf
- 解释:将
1.txt
文件中的内容作为参数传递给rm -rf
命令删除文件或目录。
- 解释:将