2014-07-17 75 views
0

我有一個C++程序。我正在LInux上執行它。我想用不同的參數執行這個程序的多個實例。例如:執行C++程序的多個進程

./exeutableProgram FILE.TXT
./exeutableProgram FILE2.TXT
./exeutableProgram file3.txt

換句話說,我想創建多個進程,使得在不同的處理器中的每個進程運行。

我該如何實現這個任務? 我需要使用fork()來製作一些程序嗎?或者我需要編寫一些shell腳本? 請在這方面提供一些指導。

+2

使用shell腳本? –

+0

@Mayerz是shell腳本 – Xara

+1

每個進程在不同的處理器上運行?不必要。你可能只有一個處理器,但是內核可以爲你做時間切片。 – asgs

回答

3

你可以寫一個bash腳本來做到這一點:

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

如果你的Linux版本安裝包util-linux,您可以使用taskset命令來啓動一個特定的CPU中的過程。要在覈心0和核心5上啓動程序:

$ taskset 0x1 ./executableProgram file.txt 
$ taskset 0x20 ./executableProgram file2.txt