Shell多线程脚本

<--目录-->

1)多线程概述

2)多线程脚本内容

3)多线程脚本执行时间

4)单线程脚本内容

5)单线程脚本执行时间

【多线程概述】

# 多线程指并发执行任务,而不是一台一台的串行来执行任务,这样可以更快且更高效的利用资源

# 我们来描述一下怎么准确控制并发数目

# 下面例子说明了一种用wait、read命令模拟多线程的一种技术技巧

# 此技巧往往用于多主机检查,比如ssh登陆、ping等等这种单进程比较慢而不耗费CPU的情况

# 还说明了多线程的控制

【多线程脚本内容】

#!/bin/bash

function a_sub {           # 此处定义一个函数,作为一个线程(子进程)

sleep 3            # 线程的作用是睡眠3秒

}

tmp_fifofile="/tmp/$$.fifo"

mkfifo $tmp_fifofile       # 新建一个fifo类型的文件

exec 6<>$tmp_fifofile      # 将fd6指向fifo类型

rm $tmp_fifofile

thread=5                   # 此处定义线程数,我给他定义了五个线程,一会就是五个并发执行

for ((i=0;i<$thread;i++));do

echo

done >&6                   # 事实上就是在fd6中放置了$thread个回车符

for ((i=0;i<20;i++));do    # 20次循环,可以理解为20个主机,或其他

read -u6

# 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,

# fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制

{   # 此处子进程开始执行,被放到后台

a_sub && {    # 此处可以用来判断子进程的逻辑

echo "Hellow World"

} || {

echo "Hellow error"

}

echo >&6    # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个

} &

done

wait

exec 6>&-   # 关闭df6

exit 0

【多线程脚本执行时间】

[[email protected] opt]# time sh a.sh

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

real    0m12.015s

user    0m0.002s

sys     0m0.017s

分析:

sleep 3s,线程数为5,一共循环20次,所以,此脚本一共的执行时间大约为12秒

所以一次执行五个线程,即五个主机一起执行,一共执行四次

  即:

  5×4=20,               五台主机一共循环四次

所以 4 x 3s = 12s      一次循环所用三秒时间

【单线程脚本内容】

[[email protected] opt]# cat b.sh

#!/bin/bash

for((i=0;i<20;i++))

do

echo "Helloworld!!!"

sleep 3

done

【单线程脚本执行时间】

[[email protected] opt]# time sh b.sh

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

real    1m0.041s

user    0m0.008s

sys     0m0.023s

结论:

多线程执行任务完成时间 12s

单线程执行任务完成时间 60s

时间: 2024-08-11 16:01:27

Shell多线程脚本的相关文章

shell多线程

关于shell的多线程 1. 多线程并发执行任务,而不用一台台的串行执行,能更快更高效 2. Shell并没有多线程的概念,所以: * 一般使用wait.read等命令技巧性地模拟多线程实 * 使用命名管道(fifo)来实现多线程的控制 3. 用途:需要对多主机批量执行检查或操作时(例如ssh.ping等操作) 分段解析一个例子来理解一个多线程脚本的书写 1. 新建fifo类型文件 tmp_fifofile="/tmp/$$.fifo" mkfifo $tmp_fifofile #新建

shell编程脚本语法

学习了两个月的Linux,记住了很多命令,知道了脚本的作用,也被脚本杀死了大概一半的脑细胞,现在脚本还不能熟练运用,感觉亏了.心疼我的脑细胞,痛恨脚本,但不得不说,脚本是一个好东西啊,用起来真的方便,但是写起来真的烧脑袋呦!下面来总结一下这周学习的脚本语法,哇,语法虽然不多也不难,但是结合起来熟练运用还有一定的难度,何况现在的脚本才几行,以后要写几行,心里没点数吗!废话少说,开始 跳过最基础的命令行堆积的脚本,总结一下让脚本更简洁实用的语法 首先,条件选择if语句登场 if语句用法:常见的单分支

怎么在命令模式下使用adb / 进入adb shell(脚本)

1.打开winows菜单,输入cmd命令,点击确定,进入命令模式下. 2.输入命令 D:(这里输入的D表示你的sdk存放的盘下) 然后回车输入cd 3.然后选择你sdk路径,复制路径. 4.鼠标点击cmd,选择编辑,选择粘贴 将复制的路径粘贴到 命令行 回车. 5.然后输入命令adb start-service 打开adb. 出现如图所示,表示adb服务开启成功,就可以使用adb命令了. 6.使用adb  shell 命令.--- 进入adb shell(脚本) 原文:http://jingya

shell之脚本实例

一 检查用户是否是root权限的方式:#!/bin/bashROOT_UID=0 # Root has $UID 0.E_WRONG_USER=65 # Not root? E_NOSUCHUSER=70SUCCESS=0 if [ "$UID" -ne "$ROOT_UID" ]then echo echo "Only root can run this script." echo exit $E_WRONG_USERelse echo ech

linux下的shell和脚本

1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/sh).Bourne Again Shell(/bin/bash).C Shell(/usr/bin/csh).K Shell(/usr/bin/ksh).Shell for Root(/sbin/sh),等等 第一个Unix shell是由肯·汤普逊,仿效Multic上的shell所实现出来,称为s

【Telnet】使用Telnet协议连接到远程Shell执行脚本

介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnblogs.com/ssslinppp/p/6244653.html 其他示例: http://commons.apache.org/proper/commons-net/examples/telnet/TelnetClientExample.java http://www.programcreek.com/ja

Linux shell 自启动脚本写法

# ********************************************************************** # Linux shell 自启动脚本写法 # 说明: # 我们在做系统的时候,写自启动脚本是常有的事,下面是一个样板分析. # # 2017-1-10 深圳 南山平山村 曾剑锋 # ********************************************************************** #!/bin/sh # 脚本

python ssh弱口令爆破多线程脚本及遇到的一些错误与问题

练习写了个SSH弱口令爆破多线程脚本,遇到的问题 1.一开始想import pexpect 中的pxssh 然而却一直该有错误, ImportError: cannot import name spawn google了下问题都说的很模糊也不清楚.有的说是pexpect模块没安装好,有的说是python import的问题,因为在lib中已经有了spawn模块,与pexpect模块中的spawn重名了,所以报错.但也都没说清楚该这么弄.最后在here这里看到了问题原因,原来是pexpect根本不

「笔记」「ubuntu」mint个人shell样式脚本

alias ll='ls -al' use_color=false # Set colorful PS1 only on colorful terminals.# dircolors --print-database uses its own built-in database# instead of using /etc/DIR_COLORS.  Try to use the external file# first to take advantage of user additions.