2014-07-17 3 views
0

У меня есть программа на C++. Я выполняю его на LInux. Я хочу выполнить несколько экземпляров этой программы с разными аргументами. Например:Выполнение нескольких процессов C++-программы

./exeutableProgram file.txt
./exeutableProgram file2.txt
./exeutableProgram file3.txt

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

Как я могу достичь этой задачи? Нужно ли делать какую-либо программу с помощью fork()? или мне нужно написать сценарий оболочки? Просьба привести некоторые рекомендации в этом отношении.

+2

Использовать сценарий оболочки? –

+0

@Mayerz yes shell script – Xara

+1

каждый процесс запускается на другом процессоре? не обязательно. У вас может быть только один процессор, но ядро ​​может сделать для вас время. – asgs

ответ

3

Вы можете написать Баш скрипт, чтобы сделать это:

for var in "[email protected]" <-- loops over all of the arguments and sets them to var. 
do 
    /path/to/executableProgram $var & <-- executes the program with current var 
              as argument, & means background process. 
done 

& будет фоновым процесс, и они должны быть распределены по различным сердечникам вашей операционной системы.

Вы могли бы назвать с:

./Script file*.txt <-- '*' is the wildcard character meaning all files with 
         the signature file??.txt (file1.txt, file2.txt etc) will 
         all become arguments. 
+0

Есть ли разница между достижением этой задачи с помощью скрипта и использованием Linux fork()? – Xara

+1

'fork()' означает написание программы, которая открывает один и тот же исполняемый файл много раз. Это то же самое, что и я сделал здесь, но это будет намного сложнее. 'fork()' более типично используется для таких приложений, как клиентские серверные приложения, где сервер вилки обрабатывает каждый клиент. –

+0

Я не написал много сценариев. Не могли бы вы объяснить мне, что $ var & делает. Когда я вызываю этот скрипт, могу ли я указать более одного аргумента? – Xara

1

Если установить util-linux пакет на распространение Linux, вы можете использовать команду taskset, чтобы начать процесс на конкретном процессоре. Чтобы запустить вашу программу на ядре 0, а затем ядро ​​5:

$ taskset 0x1 ./executableProgram file.txt 
$ taskset 0x20 ./executableProgram file2.txt 
Смежные вопросы