如何查看linux中wait命令等待的任务

在 Linux 中,wait 命令用于等待后台任务完成,但本身不直接显示等待的任务。要查看 wait 正在等待的任务,需结合 jobs 命令查看当前的后台作业。以下是详细步骤:


1. 查看后台任务(wait 等待的对象)

使用 jobs -l 命令 列出所有后台任务及其状态:

1
jobs -l

输出示例
1
2
3
[1]  + 12345 Running                 sleep 60 &
[2] - 12346 Running some_long_script.sh &
[3] 12347 Done echo "Completed"

  • [1]:作业编号(%1
  • 12345:进程 PID
  • Running:任务状态(还有 Done/Stopped
  • &:后台运行标识

2. wait 命令的用法

  • 等待所有后台任务完成:
    1
    wait
  • 等待特定任务完成(使用作业编号或 PID):
    1
    2
    wait %1     # 等待作业编号 1
    wait 12345 # 等待 PID 12345

3. 实际使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 启动两个后台任务
sleep 30 &
some_script.sh &

# 查看当前后台任务
jobs -l
# 输出:[1] 12345 Running sleep 30 &
# [2] 12346 Running some_script.sh &

# 等待特定任务(例如作业编号 1)
wait %1
# 此时 wait 正在等待 sleep 30 完成

# 等待所有任务
wait
# 此时 wait 正在等待所有后台任务(包括 some_script.sh)

4. 关键说明

  • wait 不显示任务列表:它只阻塞 Shell 直到任务完成,需通过 jobs 提前查看任务。
  • 任务状态解读:
    • Running:正在运行(wait 会等待)。
    • Done:已完成(wait 会立即跳过)。
    • Stopped:已暂停(需用 bg 恢复后 wait 才有效)。
  • 脚本中监控:在脚本中使用 wait %1 时,确保任务是通过 & 启动的后台作业。

5. 替代工具

  • 查看进程树:
    1
    pstree -p  # 显示所有进程树结构
  • 检查进程状态:
    1
    ps aux | grep "some_script.sh"

总结:

要查看 wait 命令正在等待的任务:

  1. 在调用 wait 前先用 jobs -l 列出后台任务。
  2. 根据任务状态(Running)确定哪些任务会被等待。
  3. 使用 wait %nn 为作业编号)或 wait PID 明确等待对象。