乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
bash 3.4 编写并行运行的脚本
2016-05-05 15:11:03
88
0
0
admin
限制同时在后台跑n个job并观察他们的状态,当有进程消失就触发新的job(保持后台总共有n个job),当后台job跑了超过一定时间后也kill 了它们。 ```bash [root@test ~]# cat test.sh #!/bin/bash max_back_process_number=$1 back_process_timeout=$2 back_cmd=$3 need_run_cmd_number=$4 wait_back_process() { local max_back_process_number=$1 local back_process_timeout=$2 local back_process_number=`jobs -rp | wc -l ` echo "back jobs $back_process_number" while [[ $back_process_number -ge $max_back_process_number ]];do for the_pid in `jobs -rp`;do local process_running_time=`ps -p $the_pid -o etime= | sed -r 's/(([0-9]*)-)?(([0-9]*):)?([0-9]*):([0-9]*)/0\2 * 86400 + 0\4 * 3600 + 0\5 * 60 + \6/g' | bc ` #获取进程运行的时间 if [ -n "$back_process_timeout" ] && [ $process_running_time -ge $back_process_timeout ];then local kill_pids=`pstree -p $the_pid | egrep -o '([0-9]+)'` #获取这个进程以及它所有子进程的pid kill -9 $kill_pids 2> /dev/null fi done sleep 1 back_process_number=`jobs -rp | wc -l ` done } for i in `seq $need_run_cmd_number` do echo "fock a new process" eval "$back_cmd" & wait_back_process $max_back_process_number $back_process_timeout done wait_back_process 1 $back_process_timeout #等待所有进程跑完 [root@test ~]# ./test.sh 10 10 "sleep 100" 1000 ```
上一篇:
bash 3.3 timeout 控制
下一篇:
docker_ctr_crictl
文档导航