LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 337|回复: 0

并发与后台任务

[复制链接]
发表于 2024-1-16 16:29:08 | 显示全部楼层 |阅读模式

在Shell脚本中,可以使用 & 符号将命令放入后台执行,同时使用 wait 命令等待后台任务的完成。这种技术对于在脚本中执行并发任务或异步操作很有用。下面详细展开如何使用 & 和 wait 实现并发任务:

使用 & 将命令放入后台执行
在Shell脚本中,如果你希望某个命令在后台执行,可以在命令末尾添加 & 符号。这样,该命令将被放入后台,脚本将继续执行下一个命令。

bash
Copy code
command1 &
command2
在上述示例中,command1 将被放入后台执行,而脚本将继续执行 command2。

使用 wait 等待后台任务完成
wait 命令用于等待后台任务的完成。如果在脚本中有多个任务放入后台执行,可以使用 wait 确保所有任务完成后再继续执行后续命令。

bash
Copy code
command1 &
pid1=$!  # 获取command1的进程ID

command2 &
pid2=$!  # 获取command2的进程ID

# 等待后台任务完成
wait $pid1
wait $pid2

echo "All background tasks completed."
在上述示例中,$! 获取了上一个后台命令的进程ID。然后,使用 wait 命令等待每个后台任务的完成。一旦所有任务完成,脚本将输出 "All background tasks completed."。

示例:并发执行多个任务
下面是一个更完整的示例,演示如何在脚本中并发执行多个任务:

bash
Copy code
#!/bin/bash

# 定义函数1
task1() {
    echo "Task 1 started"
    sleep 5
    echo "Task 1 completed"
}

# 定义函数2
task2() {
    echo "Task 2 started"
    sleep 3
    echo "Task 2 completed"
}

# 并发执行任务1和任务2
task1 &
pid1=$!

task2 &
pid2=$!

# 等待任务1和任务2完成
wait $pid1
wait $pid2

echo "All tasks completed"
在这个示例中,task1 和 task2 分别是两个后台任务,它们并发执行。使用 wait 命令等待这两个任务的完成,然后输出 "All tasks completed"。

这种并发执行任务的方式可以提高脚本的效率,尤其是当任务之间没有依赖关系时。然而,需要小心处理并发操作可能带来的竞态条件和同步问题。





您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表