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