免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: beizijing
打印 上一主题 下一主题

如何判断copy命令已经将一个文件copy完毕? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-01-06 10:46 |只看该作者
原帖由 waker 于 2006-1-6 10:11 发表
1.不是root也可以fuser,只要有fuser的x权限
2.假如你不能fuser一个文件,你还可以mv一个文件么?


  1. NOTES

  2.       Because fuser works with a snapshot of the system image, it may miss processes that begin using a file while fuser is running. Also, processes reported as using a file may have stopped using it while fuser was running.
复制代码


The best way is to set a lock before copying and remove the lock after copying in program 1.

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
12 [报告]
发表于 2006-01-06 12:01 |只看该作者
to: faintblue
赞同你关于fuser可能会漏掉进程的说法,虽然我的linux系统版本中的man是没有这样的警告
所有的应用都是根据输入产生输出,都有即时性的问题

但我认为需要使用锁的理由可能不是你所指出的漏掉进程
如果文件不是由本地的进程存取,fuser就无能为力了,这才是考虑用锁的理由吧?
程序1不是由楼主控制的,所以还是使用fuser这种被动的方法吧?

论坛徽章:
0
13 [报告]
发表于 2006-01-06 12:31 |只看该作者
思路1: (下面那个grep可以根据你的case改下一下)

cp data1 data2
cpid=`echo $!`

cpid0=`ps -ef |grep 'cp' |grep -v "grep" |awk '{print $2}'`

if [ $cpid -eq $cpid0 ]; then
  echo "still copying"
else
  echo "done"
fi

思路2:

我记得论坛上有个能显示cp 进度的, 对大文件非常使用. 可以改动一下让它 cp 完了提示你一下

论坛徽章:
0
14 [报告]
发表于 2006-01-06 12:50 |只看该作者
to tonyfu :要是可以一起执行,我也不至于这么麻烦了:)

to waker :刚又看了看,fuser是可以执行的,但是我试着vi一个文本文件,再用fuser去看这个文本文件,可是显示的没有进程,这是怎么回事,是不是我用的方法不对?不好意思,不太会,可以再说详细一些么

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
15 [报告]
发表于 2006-01-06 13:19 |只看该作者
呵呵,这个比较有趣
还是用操作来说明吧?
touch testfile
/sbin/fuser testfile
这时不会有结果,因为testfile没人用
vi testfile
然后^Z挂起
/sbin/fuser testfile
这时还是没有结果.....fuser出错了么?
我们再来
/sbin/fuser .testfile.swp

ps aux|grep '[v]i'
看看vi究竟在打开哪个文件呢?
不是file,而是 .testfile.swp

明白了吧?
vi file时
vi先复制file到 .filename.swp
复制完成就关闭file
然后对.filename.swp操作
当你使用w命令时才打开file-写file-关闭file
其实这时fuser没出错,vi并没有打开file

论坛徽章:
0
16 [报告]
发表于 2006-01-06 16:15 |只看该作者
进程间协同作业
最好的方法cp进程在cp完后通知你(可以生成一个临时文件),再去做move动作
move进程循环监测状态文件是否生成,再确定是否做move动作

论坛徽章:
0
17 [报告]
发表于 2006-01-06 17:32 |只看该作者
shell刚开始学

论坛徽章:
0
18 [报告]
发表于 2006-01-09 10:59 |只看该作者
谢谢waker ,问题搞定,fuser可以判断是否有进程在操作文件:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP