bash 多线程并发 如何判断每个线程返回值
时间: 2024-05-12 07:18:29 浏览: 68
在 Bash 中,可以使用 $! 变量获取上一个后台进程的 PID(进程号)。通过这个 PID,可以使用 wait 命令等待进程结束,并且获取进程的返回值。
例如,如果要在后台启动一个命令,可以像这样:
```
some_command &
```
然后,可以在代码中使用 $! 变量获取进程的 PID:
```
pid=$!
```
最后,可以使用 wait 命令等待进程结束,并且获取进程的返回值:
```
wait $pid
retval=$?
```
相关问题
bash do { } & done 语句判断每一个进程返回值
这是一个 Bash 脚本中的基本语法结构,它代表一个循环结构,花括号内的代码将会被反复执行,直到循环条件不再满足为止。在 do 后面,可以添加一些循环条件,例如 while 或 until 等。例如:
while [ $count -le 10 ]
do
echo "Count is $count"
((count++))
done
在这个例子中,循环条件是 count 小于或等于 10,每执行一次循环,就会输出 current value of count 的值,并将 count 加 1。只有当 count 大于 10 时,循环才会停止。
示例shell脚本多线程执行多个脚本
你可以使用以下示例shell脚本来实现多线程执行多个脚本:
```bash
#!/bin/bash
# 定义要执行的脚本列表
scripts=(
"script1.sh"
"script2.sh"
"script3.sh"
# 添加更多的脚本
)
# 定义并发执行的最大线程数
max_threads=3
# 等待所有子进程完成的函数
wait_for_processes() {
local pids=("$@")
for pid in "${pids[@]}"; do
wait $pid
done
}
# 循环执行脚本,并限制并发线程数
for script in "${scripts[@]}"; do
# 检查当前并发线程数是否达到最大线程数,如果达到则等待
while [ $(jobs -p | wc -l) -ge $max_threads ]; do
wait_for_processes $(jobs -p)
done
# 执行脚本
sh "$script" &
done
# 等待所有子进程完成
wait_for_processes $(jobs -p)
```
在以上示例中,你可以定义要执行的脚本列表,将其存储在`scripts`数组中。然后,你可以设置`max_threads`变量来定义最大并发线程数。
脚本会循环遍历脚本列表,并检查当前并发线程数是否达到最大线程数。如果达到最大线程数,则会等待已有的子进程完成,然后继续执行下一个脚本。
使用`sh "$script" &`命令来在后台执行脚本。
最后,脚本会等待所有子进程完成。
你可以根据需要修改脚本列表和最大线程数来满足你的要求。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)