2013-02-05 3 views
2

이것이 내가 필요한 것입니다. C 프로그램을 만들었습니다. 두 개의 하위를 포크합니다. P1, P2 나는 bash 스크립트도 일부 작성했습니다.C, Bash - bash 스크립트를 실행하고 같은 파일에서 병렬로 작업하는 프로세스

script1.sh를 실행하려면 P1이 필요하고, script2.sh를 실행하려면 P2가 필요합니다. 현재 system("script_name.sh") 또는 system("script_name &") 함수를 사용하여 비동기로 만들었으므로 올바른 선택인지 모릅니다. 왜냐하면 지금은 원하는대로 작동하지 않기 때문입니다. BTW :

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는 두 번째 줄, 세 번째 줄 등과 같이 script2를 실행해야합니다.

어떻게 C 프로그램에서이 작업을 수행 할 수 있습니까? 중요한 점은 모든 프로세스가 하나의 스크립트를 실행하고 이러한 스크립트를 병렬로 실행해야한다는 것입니다. 이 방법으로 하나의 세 번째 프로세스가 해당 출력을 읽고 작업 할 수 있도록 2 개의 프로세스가 하나의 출력을 함께 생성하도록하는 것을 목표로합니다.

나는 그것이 프로세스의 실제 실행을 인터리브하는 것은 매우 어색 당신의 도움

+0

설명이 명확하지 않으므로 1) 스크립트를 "script &" "script2 &"로 실행하면 "asynchronous"가 실행됩니다. 당신은 당신의 설명이 끝날 때 실제로 "동기화"되도록 의도되어 있음을 암시합니다. 2) 파일에는 script1이 작성한 z 줄이 없으므로 script2가 어떻게 삭제할 수 있습니까? 3) 왜 파이썬으로 모든 것을 작성하지 않았습니까? 펄 등 기타 뭔가 더 좋아 ????? – Vorsprung

+0

시스템 ("script1")을 사용하는 경우 script2가 script1이 완료 될 때까지 기다려야하므로 원하는 내용이 아니며 사용하는 파일의 내용을 작성하지 않았기 때문에 "동기식"일 필요는 없습니다. 그것은 내 C 프로그램의 일부이고 'z'라는 단어가 들어 있습니다. 나는 그것을 공부하고 있기 때문에 나는 이것을 선택하려고했기 때문에 C를 선택한다. – Frank

답변

1

에 대한 명확한

감사를 바랍니다.

출력을 인터리브하려면 각 스크립트에서 STDOUT을 파이프에 기록한 다음 각 파이프에서 한 줄씩 차례로 읽는 작은 프로그램을 작성하여 출력에 씁니다.

그러나이 방법은 문제를 해결하는 데는 많은 걸림돌입니다. 두 프로세스를 진정으로 동기화해야하는 경우 - 각각 하나의 프로세스 단계를 차례로 실행합니다. 가장 간단한 방법은 명령을 순차적으로 실행하는 단일 프로세스를 만드는 것입니다. 동시성은 어렵습니다. 필요하지 않은 경우에는 사용하지 마십시오.

+0

나는 C 언어와 그래서, 동시성을 연구하고 있는데, 문제는 내가 스스로 공부해야한다는 것이다. 그래서 나는 ac 프로그램을 만드는 데 성공했다. 내가 원하는 것은 무엇이든지, 문제는 내 솔루션이 시스템 기능과 동기화되도록 만들고 작동하는 데 사용되지만 실제로는 동시성이 필요하다는 것입니다. Btw 감사합니다 – Frank

+0

@ 프랭크 그래서 출력 '동시에'일어날 수있는 유일한 일은 무엇입니까? 이 경우 파이프에 쓰고 외부 적으로 인터리빙하면 아마도 원하는 작업 일 것입니다. –

+0

예, 프로세스 당 몇 번에 '동시에 출력'을 만들어야합니다.나는 파이프에 대해 들었지만 그것에 대해서는 전혀 모른다. 당신이 내 문제와 관련된 모범을 보여줄 수 있다면 그것에 대해 감사 할 것입니다. 감사 – Frank

관련 문제