2015-04-02 103 views
0

我想写一个shell脚本shell脚本的执行顺序

  1. 启动一个过程,从数据的基础上获取数据,并和写入文件(时间做到这一点从5分钟变化 - 几个小时)
  2. 使用在生成的文件中的数据,并做一些计算

我可以在外壳使用什么命令暂停,直到我的第一个过程完成后执行第二部分作为第二部分不应该开始直到写入前到文件是完整的?

+0

完成之前对第一部分的回报是否命令(即它在后台运行)?因为如果它只在完成时才返回,那么你不需要为此做任何事情。如果它在后台运行,那么你是否有一些方法可以知道它何时完成? – 2015-04-02 16:44:12

+0

是的,它返回之前返回,并尝试执行第二部分,而写入文件尚未完成。 – Javad 2015-04-02 16:48:35

+0

它以某种方式表示完成信号?你怎么知道什么时候结束? – 2015-04-02 16:51:28

回答

0

我认为您正在寻找wait命令,但它取决于如何启动第1部分。

+1

如果第1部分中的过程是自我背景或守护进程或某些其他情况,这将无济于事。如果他手动背景的话,那么这样做会更简单,但是不要那样做(除非这个任务的一些未指定的部分是必需的)。 – 2015-04-02 16:45:27

+0

@EtanReisner:OP询问'直到我的第一个进程完成“。如果你是自我背景的,那么你在技术上已经完成了。 – bitmask 2015-04-02 16:48:32

1

那么,你并不需要一个命令。壳牌应该简单地被阻塞,直到催生子进程终止:

proc1 
proc2 # <- will not be called until proc1 is done. 

事情只有当你做这样的东西变得复杂:

proc1 & 
proc2 # <- will start immediately after proc1 was launched 

在这种情况下,你将不得不wait,作为Politank-Z点out:

proc1 & 
wait 
proc2 

这没什么意义。


编辑:你的澄清

后,你必须得到第一个进程向你传达其子进程ID和检查,要完成。粗尝试将定期检查

ps x | grep -v grep | grep "$spawnedPID" 

(假设子进程是不是grep命令本身)

+1

您无法在非子进程上“等待”。 – 2015-04-02 16:51:13

+0

@EtanReisner:你在技术上是正确的。最好的一种正确。我以为你能够等待盛大的孩子进程。正在编辑... – bitmask 2015-04-02 20:15:20