shell多线程】的更多相关文章

关于shell的多线程 1. 多线程并发执行任务,而不用一台台的串行执行,能更快更高效 2. Shell并没有多线程的概念,所以: * 一般使用wait.read等命令技巧性地模拟多线程实 * 使用命名管道(fifo)来实现多线程的控制 3. 用途:需要对多主机批量执行检查或操作时(例如ssh.ping等操作) 分段解析一个例子来理解一个多线程脚本的书写 1. 新建fifo类型文件 tmp_fifofile="/tmp/$$.fifo" mkfifo $tmp_fifofile #新建…
文章来源,wait的使用效果还是不错的 最近在使用shell做一些部署工作,在使用过程中,效率一直不高.想提高效率,经过分析发现,并不是所有操作都是需要串行的,一些操作是可以进行并行操作的.经过学习,shell里面也是可以进行多线程编程的,而且十分方便,同时,wait命令可以进行shell的多线程同步控制.下面是shell多线程和wait命令的一些学习体会.错误之处,还请大家指正. 一.启动后台子任务 在执行命令后加&操作符,表示将命令放在子shell中异步执行.可以达到多线程效果.如下, #等…
在shell脚本里批量执行程序是比较常见的方式,如果程序很多,每个执行时间比较长,则顺序执行需要花费大量的时间. 此时并发就成为我们考虑的方向. 上篇<shell多线程>中我们已经简单实现了基于for循环的并发,可以显著提高工作效率: 缺点是CPU的核心不是无限的,如果全部占用,则会影响系统的正常运行. 这个时候我们就考虑利用linux系统的管道来进行最大并发数的管控. 1.举例: 一个厕所有10个蹲位,如果100个人来使用,则势必形成竞争,这时管理员给每个蹲位一个锁和一把钥匙,先来的人拿钥匙…
Shell中并没有真正意义的多线程,要实现多线程可以启动多个后端进程,最大程度利用cpu性能. 直接看代码示例吧. (1) 顺序执行的代码 #!/bin/bash date ` do { echo "sleep 5" } done date 输出: Sat Nov :: CST Sat Nov :: CST (2) 并行代码 使用'&'+wait 实现"多进程"实现 #!/bin/bash date ` do { echo "sleep 5&quo…
情景 shell脚本的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时.因为默认情况下,shell脚本中的命令是串行执行的.如果这些命令相互之间是独立的,则可以使用“并发”的方式执行这些命令,这样可以更好地利用系统资源,提升运行效率,缩短脚本执行的时间.如果命令相互之间存在交互,则情况就复杂了,那么不建议使用shell脚本来完成多线程的实现. 为了方便阐述,使用一段测试代码.在这段代码中,通过seq命令输出1到10,使用for...in语句产生一个执行10次的循环.…
工作中往往遇到这种情况,有许多任务,依次执行比较浪费时间,由于任务之间有依赖关系,简单的并发执行又不行. 就如同下面这种情况,任务new和dvidUser是可以并发执行的,fact任务依赖于new任务,fact执行完之后last和stat才能执行: dvidUser执行完之后dvid和User两个任务才能执行. 针对这种情况,我考虑了操作系统中的信号量机制,通过借助linux中的文件描述符(以下称pipe)来实现这几个任务的并发. 当new执行完之后,向pipe-7中写入自己当前执行的ID(在程…
不熟悉 io 重定向的童鞋,先学习一下相关知识 http://www.linuxplus.org/kb/io-redirection.html 下面是简单代码 #!/bin/bash tmpfile='fifo' mkfifo $tmpfile #创建一个先进先出队列 exec 6<>$tmpfile #使用文件描述符6关联$tmpfile for((i=0;i<5;i++));do #初始化 你想并发几个就循环几次, echo >&6 就是往队列里放5个空值,让后面的 r…
之前的文章依赖是1对1或1多对的,但每个任务的前置任务都只有1个. 本文的核心在于一个任务依赖于多个任务的执行完成,如上图所示,这个任务就是fact,只有new和dviduser两个任务都完成的情况下,fact才能继续执行. init_pipe.sh # 初始化file descriptor init_pipe(){ [ -e /tmp/fd1001 ] || mkfifo /tmp/fd1001 exec <>/tmp/fd1001 rm -rf /tmp/fd1001 [ -e /tmp/…
# 这是一个简单的并发程序,有如下要求: # .有两个程序a和b,希望他们能并发执行,以节约时间 # .a和b都是按照日期顺序执行,但b每日程序的前提条件是当日a的程序已经执行完毕 #解决方案: # .创建一个文件描述符作为pipe,a程序每次执行完就把一个日期发送给pipe,然后继续执行 # .b程序每次执行时先从pipe读取a的日期,如果a的日期>=b的日期,则b继续执行,否则阻塞. [ -e /tmp/fd5 ] || mkfifo /tmp/fd5 exec <>/tmp/fd5…
start="2018-06-17" end="2018-07-01" min=`date -d "${start}" +%Y%m%d` max=`date -d "${end}" +%Y%m%d` [ -e /tmp/fd3 ] || mkfifo /tmp/fd3 exec <>/tmp/fd3 rm -rf /tmp/fd3 ;i<=;i++)) do done while [ $min -le $ma…
a='a1' b='b1' c='c1' d='d1' e='e1' ARR=($a $b $c $d $e) rd=`date +%N` for i in ${ARR[*]} do { ;>>aa && echo "done!""${i}""$RANDOM" }& done wait…
原文链接 linux下默认是不产生core文件的,要用ulimit -c unlimited放开 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详…
https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并…
概述 [root@localhost ~]# rpm -qa|grep bashbash-4.1.2-15.el6_4.x86_64 linux limits.conf 配置 limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会话. 要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中.查看 /e…
本文介绍了 ulimit 内键指令的主要功能以及用于改善系统性能的 ulimit 用法.通过这篇文章,读者不仅能够了解 ulimit 所起的作用.而且能够学会怎样更好地通过 ulimit 限制资源的使用来改善系统性能. 概述 系统性能一直是一个受关注的话题,怎样通过最简单的设置来实现最有效的性能调优,怎样在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,常常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套參数集,用于为由它生成的 shell…
概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响. ulimit 的功能和用法 ulimit 功能简述 假设有这…
ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战. 而实际应用的环境要比这种假设复杂的多,例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求.资源的合理限制和分配,不仅仅是保证系统可用性的…
概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响. ulimit 的功能和用法 ulimit 功能简述 假设有这…
ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响. ulimit 的功能和用法 ulimit 功能简述 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源…
系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响. 一.ulimit 的功能和用法 1.ulimit 功能简述 假设有…
7月20日任务 20.31 expect脚本同步文件20.32 expect脚本指定host和要同步的文件20.33 构建文件分发系统20.34 批量远程执行命令扩展:shell多线程 http://blog.lishiming.net/?p=448 20.31 expect脚本同步文件 使用expect脚本实现在一台机器上把文件同步到另外一台机器上,这里需要用到核心命令rsync,如果是手动方式进行同步,那么还需要单独输入密码,所以没有脚本方式操作方便. 示例:自动同步文件 [root@jim…
原文出自 通过 ulimit 改善系统性能 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制.本文将在后面的章节中详细说明 ulimit 的功能,使用以及它的影响,并以具体的例子来详细地阐述它在限制资源使用方面的影响. ulimit 的…
通过多线程资源竞争的手段同时上传两个头像,就可以在Apache+Rails环境下实现远程代码执行.这并不是天方夜谭,同时我相信许多文件上传系统都会有这个漏洞……这是一个非常有趣的安全实验,一起来看看吧! FreeBuf小科普: Rails:某种基于Ruby语言的高效WEB框架.Paperclip:Thoughtbot公司出品的Rails图片上传插件..htaccess:Apache服务器中的一个配置文件,笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护.用户自动重定向.自定义错误页…
shell 中用管道模拟多线程 这里以两个例子来对比多线程和单进程 单线程的例子 # config.txt在这个例子和多线程的例子中都会用到 [root@ns_10.2.1.242 test]$ cat config.txt 1 2 3 4 1 2 3 4 # 下面的代码,是从config.txt中读取配置,然后sleep一定时间,然后打印sleep 的时间长度, # 注意 while从文本读取数据,是逐行读取的 [root@ns_10.2.1.242 test]$ cat while.sh w…
shell脚本的多线程 #!/bin/bash ###这是个多线程脚本!!!! ..} do { .$i >/dev/null ];then echo "192.168.2.$i 存活" else echo "192.168.2.$i 不存活" fi } & done wait…
任务需要:当我需要对一个文件夹中的文件,分别压缩的时候: 原始的代码: #!/usr/bin/shell function getdir(){ for element in `ls $1` do #echo $element dir_or_file=$1$element #echo $dir_or_file if [ -d $dir_or_file ] then #echo tar cvf tar_data/$element.tar $dir_or_file `zip -q -r ../tar_…
  shell中并没有真正意义上的多线程,要实现"多线程"可以启动多个子进程,并将子进程放入后台执行来模拟多线程,最大程度利用CPU性能. 循环中执行并行代码 #!/bin/bash date for i in `seq 1 5` do { echo "sleep 5" sleep 5 } & done wait date 执行结果如下: Thu Oct 19 19:58:43 CST 2017 sleep 5 sleep 5 sleep 5 sleep 5…
PHP+shell实现多线程的方法 这里介绍怎样借助shell脚本实现多线程. 先写个简单的php代码.这里为了让脚本运行时间更长.方便看效果,sleep一下.呵呵.先看下test.php的代码:ls PHP代码: ? 1 2 3 4 5 6 <?php for ($i=0;$i<10;$i++) {   echo $i;   sleep(10); } ?> 在看下shell脚本的代码,很easy ? 1 2 3 4 5 #!/bin/bash for i in 1 2 3 4 5 6…
 如何实现shell并发      很多人都问我如何写shell脚本,如何实现同时给三台ftp服务器上传文件,如何同时检测三台服务器是否alive等,其实这就是想实现shell的并发.那么shell并发该如何实现呢?     下面我就拿这个例子来讲:       每次任务都是输出字符“bingfa”,并停留一秒钟,共20次.     按照正常思维,脚本应该这样写: [root@station1 ~]# cat a.sh #!/bin/bash for((i=0;i<20;i++)) do sle…
shell脚本中的多线程 很多场景中会用到多线程,例如备份数据库,有100个库,正常备份效率极其低下.有了多线程原本可能需要10个小时备份,现在分10个线程同时去干,只要一个小时就解决了.今天就介绍下shell中如何使用多线程去完成一些操作,提高我们的效率. 首先我们需要了解以下一些知识点: 1.文件描述符 [root@localhost ~]# touch file1         #先创建一个文件 [root@localhost ~]# exec 6<> file1   #通过exec的…