Shell编程:同时执行两个应用程序

时间:2009-06-24 12:49:32

标签: linux shell

我有两个应用程序,我们称之为APP1和APP2。我想那些 两个在我的机器上并行执行。没有必要,他们从完全开始 同一时间但应该大致在同一时间开始。一个初步的想法是有一个壳 脚本如下所示:

./ APP1&
./APP2

这是技巧还是我需要插入一个等待语句以确保APP2在特定时间范围内启动?

由于

5 个答案:

答案 0 :(得分:5)

这可能会更好:

./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

答案 1 :(得分:4)

您的解决方案应该在实践中运行。否则,您可以使用at,cron和类似的任何调度程序在特定时间启动这两个命令。

答案 2 :(得分:3)

这样可以正常工作。

答案 3 :(得分:2)

AFAIK shell不保证程序的开始时间,但实际上它应该几乎同时启动

答案 4 :(得分:0)

这样可行,你甚至可以在APP1之前启动APP2。如果时间不重要但顺序是APP1必须在APP2之前开始,那么这种结构不会给你这个保证。

如果你想在运行APP2之前有机会让APP1运行,你应该包含一个睡眠声明。