我有两个应用程序,让我们打电话给他们APP1和APP2。 我希望这两个在我的机器上并行执行。 他们没有必要在同一时间开始,但应该在大致相同的时间开始。 一个初步的想法是有一个shell脚本,如下所示:
./APP1&
./APP2
这是诀窍还是我需要插入一个等待语句,以确保在一定的时间框架内启动APP2?
谢谢
这可能会更好:
./app1 & ; ./app2 &
但是,正如已经指出的那样,shell将在子shell中将其中的每一个都作为子进程启动。 shell没有关于进程之间的任何同步或关于启动时间的保证。
为什么你需要这些并行运行? 也许理解这个要求会给你一个更好的答案。
你可以在这两个程序中建立一些非常简单的启动同步。 这里是示例的“app1”部分。
#!/bin/sh # app1.sh # Do any setup, open log files, check for resources, etc, etc... # Sync with the other app typeset -i timeout=120 count=0 touch /tmp/app1 while [[ ! -e /tmp/app2 ]] ; do if [[ $count -ge $timeout ]] ; then print -u2 "ERROR: Timeout waiting for app2" exit 1 fi (( count += 1 )) sleep 1 done # Do stuff here... # Clean up rm /tmp/app1 exit 0
您的解决方案应该在实践中工作。否则,您可以使用像at,cron和类似的任何调度程序在特定时间启动两个命令。
这将工作正常。
AFAIK shell并不能保证程序的启动时间,但实际上它应该几乎同时启动
这将起作用,甚至可以在APP1之前启动APP2。 如果时间不重要,但订单是和APP1必须在APP2之前开始,那么这种结构不会给你这个保证。
如果您想在APP2运行之前让APP1运行,您应该包含睡眠声明。