2013-05-14 10 views
0

У меня есть приложение C Sockets, различные исполняемые файлы которого должны запускаться одновременно одновременно, предпочтительно на разных терминалах. Как мне это сделать? Например, есть четыре exes, ./one, ./two, ./three, ./four.Выполнять сразу несколько исполняемых файлов

Я хочу, чтобы они запускались на разных терминалах Linux без малейшей разницы во времени. Как мне это сделать?

+1

Даже если вам удастся запустить все ваши программы в одно и то же время, они * будут * рано или поздно выполнять синхронизацию, поскольку планировщик ОС будет запускать их в разное время на разных ядрах и на разных интервалах; они будут работать даже на разных скоростях из-за кэширования памяти и т. д. Вы не говорите, почему их нужно запускать «без малейшей разницы во времени», но это проблема, которую вам действительно нужно решить. [В чем проблема, которую вы на самом деле пытаетесь решить здесь?] (Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – Celada

+0

runnign на трех разных терминалах или вы хотите направить вывод на три разных терминала –

ответ

1

Всегда будет как минимум «малейшая разница во времени». Просто попросите своего exe согласиться на время, чтобы продолжить и просто спать до этого времени, прежде чем делать то, что им нужно делать.

0

Вы никогда не будете запускать несколько процессов одновременно. Если вам нужно просто начать их почти в одно и то же время для тестирования, тогда, вероятно, самый простой способ - запустить эмулятор терминала для запуска каждого из ваших исполняемых файлов. Если вы установили xorg, то вы можете открыть xterm и запустить там что-то вроде этого:

xterm -e "./app1; /bin/bash" & xterm -e "app2; /bin/bash" & ... 

где/бен/Баш называется, чтобы предотвратить закрытие новых xterm сек после того как ваша заявка будет закончена.

Я не bash эксперта, так это работает на моей машине, и я не могу быть уверен, что именно эта строка будет работать с более старым или более поздней версией bash или sh пр с другим эмулятором терминала. Но вы всегда можете написать что-то подобное.

0

Для запуска одновременно вы можете сделать что-то вроде этого:

 "declare -a cmd=(./first ./second ./third); for i in ${cmd[@]}; do exec $i wait & done" 

Это может помочь вам автоматизировать вашу задачу. Сохраните свои команды в массиве, выполните их. Он будет запускать все процессы в фоновом режиме и начнет пытаться запускать их одновременно.

Смежные вопросы