Makefile:运行进程并在进程完全启动后执行其他操作

时间:2015-04-03 08:47:45

标签: makefile

我有一个启动tunslip的makefile,如下所示:

connect-router: $(CONTIKI)/tools/tunslip6
    sudo $(CONTIKI)/tools/tunslip6 -B $(TUNSLIP_BAUD) $(PREFIX) -v6

我想要的是,在完全初始化此tunslip之后,它启动一个守护进程来填充一些路由表。我试过的是这个:

connect-router: $(CONTIKI)/tools/tunslip6
    @echo "Doing tunslip"
    sudo $(CONTIKI)/tools/tunslip6 -B $(TUNSLIP_BAUD) $(PREFIX) -v6
    @echo "Doing routing tables"
    sudo smcroute -k
    sudo smcroute -d

第一个回显到达,进程启动,但其他命令没有执行,可能是因为makefile正在忙着执行该过程,从不给出第二个回声!但是,我需要在隧道完全初始化之后启动smcroute,因此它必须是这个顺序。我该怎么做?

编辑:

connect-router: $(CONTIKI)/tools/tunslip6
    @echo "Doing tunslip"
    ( sudo $(CONTIKI)/tools/tunslip6 -B $(TUNSLIP_BAUD) $(PREFIX) -v6 )
    @echo "Doing routing tables"
    sudo smcroute -k
    sudo smcroute -d

1 个答案:

答案 0 :(得分:0)

这不是一个真正的问题,它是一个shell问题。 Make只是在shell中运行命令,就像你自己在shell提示符下键入它们一样。如果从shell运行命令,则shell将等待命令完成,然后继续执行下一个命令。

添加括号不会改变这一点,因为括号只是在子shell中运行命令...但是父shell在继续执行下一个命令之前仍然等待子shell完成。

在shell同时运行下一个命令时让一个命令继续的唯一方法是将第一个命令放在后台,然后使用&符号{{1}执行此操作运算符:

&