Linux带有时间控制的多进程bash脚本
目标
以可控制的多进程执行,达到最大执行时长后停止脚本。
思路
1、产生fifo管道,并预填充n个值(与并发数相等)
2、记录脚本本身PID并启动计时器进程(计时终止后杀脚本本身PID)
3、并发执行
4、正常执行后,杀掉计时器子进程
5、回收fd
控制参数
PROC: 进程数
MAX_EXEC_TIME: 最大执行时长
不带时间控制版本
#!/bin/bash trap "exec 10>&-;exec 10<&-;exit 0"
mkfifo testfifo
exec <>testfifo
rm -f testfifo for x in {..};do
echo >&
done for x in {..};do
read -u10
{
### do something
echo "success:$x"
sleep
echo >&
}&
done wait exec >&-
exec <&-
带时间控制版本
#!/bin/bash
## create fd
[[ -e ./fd1 ]] || mkfifo ./fd1
exec <> ./fd1
rm -rf ./fd1 PROC= for i in `seq ${PROC}`;
do
echo >&
done ## Define max execuate time here
MAX_EXEC_TIME= ## echo $$ > PPID
ppid=$(echo $$) ## time tic-toc
{
sleep ${MAX_EXEC_TIME} && exec <&- && exec >&- && echo "ABORT" && kill $ppid
}&
## echo $! > PID
pid=`echo $!`
################
## task list
for line in `seq `;
do
read -u6
{
## do something here
echo "start_task_${line}: $!"
sleep
echo >&
}&
done
sleep
kill $pid
wait ## close fd read & write
exec <&-
exec >&- echo "NORMAL EXIT" && exit
Linux带有时间控制的多进程bash脚本的更多相关文章
- 在ubuntu linux 中编写一个自己的bash脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...
- linux下一键安装 powershell,的bash脚本
说明 目前,linux下的powershell约等于pash.希望大家专注mono,关注pash. 一键安装脚本包括for centos6,centos7,ubuntu 14.04 ubuntu 1 ...
- Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)
阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...
- Linux Bash脚本编程语言中的美学与哲学
我承认,我再一次地当了标题党.但是不可否认,这一定是一篇精华随笔.在这一篇中,我将探讨Bash脚本语言中的美学与哲学. 这不是一篇Bash脚本编程的教程,但是却能让人更加深入地了解Bash脚本编程,更 ...
- Linux开机执行bash脚本
问题描述: Linux开机执行bash脚本 问题解决: (1)在 /etc/init.d文件夹中新建一个脚本myinit (2) ...
- 用Bash脚本将Linux普通用户添加为系统管理员
将Linux普通用户添加为系统管理员在Gnome或KDE这样强大与完善的桌面环境下是非常简单的事情,一般来说在用户设置的对话框里就直接有相应选项.不过,出于简洁与高效的风格,自己目前并未使用这些高端但 ...
- Linux中编写Bash脚本的10个技巧
Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式.尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能. 本文中,我们将分享 ...
- 通过定时任务 bash 脚本 控制 进程 的 执行时间
通过定时任务 bash 脚本 控制 进程 的 执行时间
随机推荐
- MySql存储过程简单实例
转自:http://www.cnblogs.com/zhuawang/p/4185302.html ********************* 创建表 ************************ ...
- CentOS 6 & 7 忘记root密码的修改方法
https://www.linuxidc.com/Linux/2018-01/150211.htm
- PHP数组键值使用单引号和双引号和无符号的区别
PHP数组键值使用单引号和双引号和无符号的区别 方法/步骤 1 第一种:$array['key']此单引号键值模式可以直接被解析为一个数组即$array 第二种:$array["key&qu ...
- django2.0实现数据详情页展示的流程
思路整理 1 先在urls.py中,定义路由获取的格式 url(r'^detail/(\d+)/$', views.blog_detail), 2 然后在views.py,定义数据获取的方法 def ...
- React-Todos
最近学完React的最基本概念,闲下来的时候就自己写了一个Todo-List的小应用.这里做个简略的说明,给想好好学React的新手看. React-Todo 学习前提 这里我用了webpackb做了 ...
- selenium webdriver——JS滚动到指定位置
1.DOM滚动方法 1.scrollIntoView(alignWithTop) 滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素.如果alignWithTop为true,或者省略它, ...
- dom4j读取XML文件内容
<?xml version="1.0" encoding="UTF-8"?> <RESULT> <VALUE> <NO ...
- 迷你MVVM框架 avalonjs 学习教程1、引入avalon
avalon是国内最强大的MVVM框架,没有之一,虽然淘宝KISSY团队也搞了两个MVVM框架,但都无疾而终.其他的MVVM框架都没几个.也只有外国人与像我这样闲的架构师才有时间钻研这东西.我很早之前 ...
- 编程语言分类和Python解释器介绍
主要内容: 一.编程语言分类和介绍 二.Python解释器分类和介绍 一.编程语言分类和介绍 1.编程语言分类 编程语言的发展依次经历了机器语言.汇编语言和高级语言. 2.编程语言的介绍 2.1 ...
- CentOS 7 调整 home分区 扩大 root分区
总体过程: 把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home ,恢复/home内容 1.查看分区 df -h 2.备份home分区文件 tar c ...