2

これは私が必要とするものです: 私は C プログラムを作成しました。それは 2 つの子をフォークします: P1、P2 また、いくつかの bash スクリプトを作成しました。

script1.sh を実行するには P1 が必要で、script2.sh を実行するには P2 が必要です。現時点では、関数を使用しているsystem("script_name.sh")system("script_name &")、非同期にするかはわかりませんが、現時点では思い通りに動作しないため、それが正しい選択であるかどうかはわかりません。ところで:

script1.sh はこれを行います:

# it search a word in a dictionary and write in a file the exact line in which that 
# word is in the dictionary, i.e. word="a" is in position "1" so 
# it will write "1" in the first line of file.

 while read line; 
 do 
 sleep 1
     TRASFORMATA=$( echo "$line" | tr "[:upper:]" "[:lower:]" | sed -e 's/ //g' )  
     echo "WORDS TO SEARCH IN DICTIONARY : $TRASFORMATA:" 
     WORD=$( fgrep -w -i "$TRASFORMATA" "$dictfile" )  # got from dictionary
     echo $WORD 
  if [ -z "$WORD" ]  ## if it's not in dictionary
  then
     echo "$WORD not found!" 
     echo 
  else              
     echo "Word and relative line found.........."
##### if found, it write the relative line to a file #####
     LINE1=$( fgrep -w -n "$WORD" "$dictfile" | sed s/:$WORD//g )   
     echo "$LINE1" >> "$FILE_OUTPUT"       
  fi
 done < "$FILE_INPUT"  

script2.sh はこれを行います:

# delete lines starting with letter 'z' FROM SAME FILE THAT USES script1.sh
sleep 1
while true;
do
sleep 2
echo "DELETING WORDS "
sed -i '/^z/d' "$FILE_OUTPUT"
done

それらは同じファイル (.txt) で動作します。 私が望むのは、それらを同時に実行することであり、それらは順番に動作する必要があります。つまり、P! の後です。スクリプト 1 で最初の行を読み取り、P2 はスクリプト 2 を実行する必要があり、2 行目、3 行目なども同様です...

Cプログラムからこれを行うにはどうすればよいですか? 重要なことは、すべてのプロセスが 1 つのスクリプトを実行し、これらのスクリプトを交互に並行して実行する必要があることです。 このようにして、3 分の 1 のプロセスがその出力を読み取って作業できるようにするために、2 つのプロセスが 1 つの出力を一緒に生成できるようにするという目標を達成しました。

私はそれが明確であることを願っています

ご協力いただきありがとうございます

4

1 に答える 1

1

プロセスの実際の実行をインターリーブするのは非常に厄介です。

出力をインターリーブするには、各スクリプトでその STDOUT をパイプに書き込み、次に各パイプから 1 行を順番に読み取り、それを出力に書き込む小さなプログラムを作成します。

ただし、これは問題を回避する長い道のりのようです。2 つのプロセスを本当に同期する必要がある場合 (それぞれが 1 つの処理ステップを順番に実行する場合)、最も簡単な方法は、コマンドを順番に実行する単一のプロセスを用意することです。並行性は難しい - 必要がなければ使用しないでください。

于 2013-02-05T21:32:40.163 に答える