1

Linux サーバー (Ubuntu 12.04 LTS) には、expA、expB、および expC の 3 つのスクリプトがあります。次に、nctu_0、nctu_1 ..... nctu_31 という名前の 32 個の入力ファイルを取得しました。そのうちの 6 つは他のファイルよりもはるかに大きいため、expA 用に 3 つの入力ファイル、expB 用に 3 つ、expC 用にもう 1 つの入力ファイルを使用します。

つまり、expA: nctu_6 nctu_13 nctu_17 を実行し、expB: nctu_20 nctu_24 nctu_31 を実行し、expC: 他のファイルを実行します。

これは expB の元のスクリプトであり、expA のスクリプトは expB とほぼ同じです。

#!/bin/bash
PROGRAM=./Simulator
FILE_PART_PREFIX1=/home//data/pcap_partial/h1200/nctu_
RESULT_PREFIX1=/home/data/setup_exp/h1200
RECEIVER_SIZE=4096
SENDER_SIZE=4096
BETA=0.25
UPDATE=400
MARKER=20
part=20
if [ ${part} -eq 20 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE}    ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
part=24
if [ ${part} -eq 24 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE}   ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
part=31
if [ ${part} -eq 31 ];then
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE} ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi

最初に nctu_20 を実行し、nctu_24 が完了したら nctu_24 を実行します。nctu_24 が完了したら、最後に nctu_31 を実行します。


これがexpCの元のスクリプトです

#!/bin/bash
PROGRAM=./Simulator
FILE_PART_PREFIX1=/home/data/pcap_partial/h1200/nctu_
RESULT_PREFIX1=/home/data/setup_exp/h1200
RECEIVER_SIZE=4096
SENDER_SIZE=4096
BETA=0.25
UPDATE=400
MARKER=20
for (( part=0;part<32;part=part+1 ))
do
if [ ${part} -eq 6 ] || [ ${part} -eq 13 ] || [ ${part} -eq 17 ] || [ ${part} -eq 20 ] ||[ ${part} -eq 24 ] || [ ${part} -eq 31 ];then
continue
else
nohup ${PROGRAM} 1 ${FILE_PART_PREFIX1}${part}.pcap ${RECEIVER_SIZE} ${SENDER_SIZE} ${BETA} ${UPDATE} ${MARKER} ${MODE} >> ${RESULT_PREFIX1}/res_${part} 2>&1 &
fi
done

簡単に言えば、expA、expB expC を同時に実行し、それぞれがバックグラウンドでシーケンシャル入力ファイルを使用してシミュレーター プログラムを起動したいと考えています。誰かが私を助けることができますか?

4

1 に答える 1

0

あなたが何を必要としているのかよく理解できていませんが、それらを同時に実行したい場合、bash は役に立たないと思います。スレッドをサポートする他の言語でラッパーを作成する必要があります。これは perl の例です。

#!/usr/bin/perl
use strict;
use warnings;
use threads;

sub start_simulator {
   my $simulator = shift;
   system("./$simulator");
}

my $thA = threads->create('start_simulator', 'expA');
$thA->detach();

my $thB = threads->create('start_simulator', 'expB');
$thB->detach();

my $thC = threads->create('start_simulator', 'expC');
$thC->detach();

exit 0;

このラッパーを、シェル スクリプトと同じディレクトリ内に追加し、.xml で実行し./perl_wrapper.plます。

于 2012-09-10T20:47:54.920 に答える