Программирование оболочки: выполнение двух приложений одновременно - PullRequest
4 голосов
/ 24 июня 2009

У меня есть два приложения, давайте называть их APP1 и APP2. Я хотел бы, чтобы те два выполняются параллельно на моей машине. Не обязательно, чтобы они начинались именно в то же время, но должен начаться примерно в то же время. Первоначальная мысль состояла в том, чтобы иметь раковину скрипт, который выглядит следующим образом:

. / APP1 &
./APP2

Это трюк или мне нужно вставить оператор ожидания, чтобы убедиться, что APP2 запускается в течение определенного времени?

Спасибо

Ответы [ 5 ]

5 голосов
/ 24 июня 2009

Это может быть лучше:

./app1 & ; ./app2 & 

Но, как уже указывалось, 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
4 голосов
/ 24 июня 2009

Ваше решение должно работать на практике. В противном случае вы можете использовать любой планировщик, например at, cron и аналогичный, для запуска обеих команд в определенное время.

3 голосов
/ 24 июня 2009

Это будет хорошо работать.

2 голосов
/ 24 июня 2009

Оболочка AFAIK ничего не гарантирует о времени запуска программ, но на практике она должна запускаться почти одновременно

0 голосов
/ 24 июня 2009

Это будет работать, и вы даже можете запустить APP2 до APP1. Если время не имеет значения, но порядок есть, и APP1 ДОЛЖЕН начинаться до APP2, тогда эта конструкция не даст вам этой гарантии.

Вы должны включить оператор сна, если вы хотите оставить возможность запуска APP1 до запуска APP2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...