私はプロセス間で同期したいと思います。私のコンピュータは2つのコアを持っています。コマンドラインからシミュレーション番号を入力することができます。入力が2、プロセスの1つが終了するまで待機する必要があります。そのうちの1つが終了した場合、次のプロセスが実行されます。たとえば、最初の2つのプロセスはすでに進行中であり、1番目のプロセスは2番目のプロセスの前に終了しています。実行されます。私はbashで新しいです、私は考え出しました。それは待っている:コマンドが見つかりませんでした。私はどのようにそれを行うことができますか?ここに私のスクリプトは次のとおりです。一つのプロセスが終了して別のプロセスを実行するのを待ちます。
#!/bin/bash
# My first script
count=2
echo -n "Please enter the number of simulation :"
read number
echo "Please enter the algorithm type "
printf "0 for NNA\n1 for SPA\n2 for EEEA :"
while read type; do
case $type in
0) cd /home/cea/Desktop/simulation/wsnfuture
taskset -c 0 ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA0/0 &
taskset -c 1 ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA0/1 &
while [ $count -lt $number ]; do
anywait
cd /home/cea/Desktop/simulation/wsnfuture
mkdir /home/cea/Desktop/simulation/RESULTS/NNA/NNA$count
taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA$count/$count &
count=$((count + 1))
done
;;
1) while [ $count -lt $number ]; do
cd /home/cea/Desktop/simulation/wsnfuture1
taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/SPA/$count &
count=$((count + 1))
done
;;
2) while [ $count -lt $number ]; do
cd /home/cea/Desktop/simulation/wsnfuture2
taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/EEEA/$count &
count=$((count + 1))
done
;;
*) echo "You did not enter a number"
echo "between 0 and 2."
echo "Please enter the algorithm type "
printf "0 for NNA\n1 for SPA\n2 for EEEA :"
esac
done
function anywait(){
while ps axg | grep -v grep | grep wsnfuture> /dev/null; do sleep 1; done
}
私の答えのように 'wait'コマンドを使って問題を解決できましたか? – Inian
ユーザー応答にselect文を使用して、待機を待つことができます。まだpsが必要な場合は、pgrepが優れています。 – SaintHax