社区
Linux/Unix社区
帖子详情
shell脚本中并发复制文件
kg200704
2015-03-20 01:06:44
麻烦请教各位一个问题,我在shell脚本并发复制文件,但是有时(不是每一次)却出现
cpio: mkdir failed - File exists
cpio: chmod failed - Stale NFS file handle
for i in 1 2 3 4 5
do
(cp -f myfile /des) &
done
各位是否遇到过?
...全文
181
回复
打赏
收藏
shell脚本中并发复制文件
麻烦请教各位一个问题,我在shell脚本并发复制文件,但是有时(不是每一次)却出现 cpio: mkdir failed - File exists cpio: chmod failed - Stale NFS file handle for i in 1 2 3 4 5 do (cp -f myfile /des) & done 各位是否遇到过?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shell
脚本
并发
1、怎么理解
shell
并发
: 当我们在执行一个for循环时,假设这个for循环需要循环500次,每循环一次就需要1秒,当这个for循环的
脚本
执行完毕时,就需要500秒,这样看效率有些低(尤其在量级高的时候,会更明显),所以我们需要
shell
脚本
的for循环无论循环多少次,让它们同时执行,不需要按顺序循环,这就是
shell
脚本
的
并发
。 2、如何实现
shell
脚本
并发
: 实现非常简单,就是在循环体的{}后面加上一个&符号,代表每次循环体的命令都放入后台运行 3、经典实例: 判断192.168.80.0/
shell
脚本
实现程序
并发
执行
shell
脚本
实现程序
并发
执行 循环实现
并发
程序:
并发
的实现原理是将进程放到后台运行,从而不影响当前
shell
的运行。在
shell
脚本
中
有&符号可以实现这个操作。 # !/usr/bin/bash echo "hello multiprocess" for ((i=0; i<10; i++)); do { echo $i sleep 2s }& # 在程序后面加上&表示命令在后台执行 done wait # 等待子进程结束 echo "run end
【Linux】
shell
脚本
实现多
并发
情景
shell
脚本
的执行效率虽高,但当任务量巨大时仍然需要较长的时间,尤其是需要执行一大批的命令时。因为默认情况下,
shell
脚本
中
的命令是串行执行的。如果这些命令相互之间是独立的,则可以使用“
并发
”的方式执行这些命令,这样可以更好地利用系统资源,提升运行效率,缩短
脚本
执行的时间。如果命令相互之间存在交互,则情况就复杂了,那么不建议使用
shell
脚本
来完成多线程的实现。 为了方便阐述,使用一段测试代码。在这段代码
中
,通过seq命令输出1到10,使用for...in语句产生一个执行10次的循环。每一次循
shell
脚本
的
并发
shell
脚本
的
并发
Default模式下,
shell
命令是阻塞执行的,可以通过其后添加&让这条命令异步执行,如:sleep 10 &执行这条命令后,并不会阻塞10秒,而是立即返回。如果将这种方法用在while循环
中
,则可以实现多进程并行处理。例如一下test1.sh
文件
为:#!/bin/bash while read line do { command 1 } & donecommand 2这样
Shell
脚本
中
并发
线程以及
并发
数的控制
主要记录一下
Shell
脚本
中
的命令的
并发
和串行执行。 默认的情况下,
Shell
脚本
中
的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么就要使用命令的
并发
执行了。 看下面的代码: [plain] view plaincopy #!/
Linux/Unix社区
23,107
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章