我希望现在能够启动一个命令,但只能在旧命令(已在运行)完成后才能启动它。
例如,假设我正在通过网络复制一个大文件,这个操作已经占用了我的网络带宽。然后我想将第二个大文件(不太重要)复制到同一目标,但为了让第一个文件尽快完成,我想将第二个文件延迟到第一个文件完成后再进行复制。
通常我会这样做:
10分钟前:
cp large_file_urgent ~/networkmnt/
现在时间:
sleep <some_guesstimated_time_for_old_cp_to_finish> && cp large_file_lessimportant ~/networkmnt
有没有更聪明的方法可以做到这一点?我能以某种方式告诉第二个cp
等待直到第一个cp
的PID终止吗?
这是在 Ubuntu 13.04 上(如果有任何后果的话)。
答案1
答案2
cp largefile1 somedestination
...时间流逝...
wait $(pidof cp)
cp largefile2 someplace
bash 内置等待将暂停,直到指定的作业/进程(如果未指定,则为所有作业)完成后再继续。
答案3
您可以使用文件系统检查该进程是否仍在运行/proc
:
while test -d /proc/$cp_pid; do
sleep 10
done
cp next_big_file network