Shell script skal skrive annenhver gang

Diskuter andre serversidespråk / -teknologier som J2EE, .htaccess, Progress 4GL, CGI/Perl m.m

Shell script skal skrive annenhver gang

Innlegg solo » 06.11.2011 11:58

Har følgende script:
Kode: Merk alt
#!/bin/bash

function child(){
        for X in {0..6}
        do
                #echo "$$"
                echo "Child"
                sleep 1
        done
        return 0
}

function parent(){
        for I in {0..6}
        do
                #echo "$$"
                echo "Parent"
                sleep 1
        done
        return 0
}

#Start barnet
child &

# Start foreldre-lokke
parent


Meningen er at Parent og Child skal skrives annenhver gang, noe det ikke gjør:
putty.jpg
putty.jpg (64.78 KiB) Vist 4904 ganger


Fikk et tips om at jeg kan bruke flock(1)

Men står litt fast, skjønte ikke helt hvordan jeg skal skrive dette inn. Skjønner konseptet med lås, men ikke helt hvordan jeg skal programmere
Brukerens avatar
solo
Medlem
 
Innlegg: 989
Registrert: 15.10.2003 18:25
Bosted: Larvik

Re: Shell script skal skrive annenhver gang

Innlegg adeneo » 06.11.2011 17:42

Har lite greie på shell scripts, men det ser litt bakvendt ut for meg.
Når man har to funksjoner med for loops, og kjører begge funksjonene så har man vel ingen kontroll over i hvilken rekkefølge echoene kommer ettersom funksjonene går sin gang, og eneste mulighet for å få verdiene annen hver gang er hvis man er så heldig at begge funksjonene bruker akkurat like lang tid på alle loopene, noe som er fint lite sannsynlig.

Det er godt mulig det går an å låse eller pause funksjonene mellom loopene mens den andre funksjonen går eller noe slikt, men det høres komplisert ut.

Normalt så ville det vært modulus (i%2) som brukes til å kjøre odd/even funksjoner o.l. og også slike ting som å skrive noe annenhver gang osv. men det mest naturlige ser ut til å være å lage en noe større funksjon som igjen har de to funksjonene i en for loop og utfører de kun en gang hver per loop, og da vil de også skrive resultatet annenhver gang, men det blir nok litt hjernetrim med variabler og slikt, for jeg regner med dette skal brukes til noe mer enn i eksempelet ?
adeneo
Medlem
 
Innlegg: 628
Registrert: 08.04.2011 21:09

Re: Shell script skal skrive annenhver gang

Innlegg solo » 06.11.2011 18:24

parent og child er to forskjellige prossesser, og prosessoren dette kjøres på har 4 kjerner. Derfor oppstår problemet med at de ikke kjøres annenhver gang...
Brukerens avatar
solo
Medlem
 
Innlegg: 989
Registrert: 15.10.2003 18:25
Bosted: Larvik

Re: Shell script skal skrive annenhver gang

Innlegg Matsemann » 07.11.2011 11:34

Hvorfor ikke bare gjøre alt i samme løkke?
Jeg kan ikke shell, men kunne sett for meg noe slikt:

Kode: Merk alt
#!/bin/bash

function child(){
        for X in {0..6}
        do
                #echo "$$"
                echo "Child"
                echo "Parent"
                sleep 1
        done
}
#Start barnet
child &
Master i Datateknikk, NTNU
Brukerens avatar
Matsemann
Moderator
 
Innlegg: 2133
Registrert: 05.02.2005 19:13

Re: Shell script skal skrive annenhver gang

Innlegg solo » 07.11.2011 21:30

Grunnen er at det skal være to forskjellige prosesser.
Brukerens avatar
solo
Medlem
 
Innlegg: 989
Registrert: 15.10.2003 18:25
Bosted: Larvik

Re: Shell script skal skrive annenhver gang

Innlegg Wi11iam » 07.11.2011 22:22

solo skrev:Grunnen er at det skal være to forskjellige prosesser.

Når du beveger deg over på programmere med flere tråder i shell scripting så vil jeg påstå at en av to ting har skjedd:
1. Du forsøker å gjøre noe som må gjøres i flere tråder, men har valgt feil verktøy for å gjøre det. Python hadde vært mitt valg, eller kanskje java, men ikke bash scripting som så vidt meg kjent ikke støtter multithreading.
2. Du forsøker å gjøre noe med flere tråder som du ikke trenger å bruke flere tråder til.

Du må nesten utdype hva du forsøker å gjøre, for jeg tror du har tatt en feil sving en sted.
Wi11iam
Medlem
 
Innlegg: 189
Registrert: 15.12.2010 10:20

Re: Shell script skal skrive annenhver gang

Innlegg solo » 07.11.2011 22:30

Hehe, ja, dette blir litt avansert. Klarte å få dette til med C-programmering med mutex-lås, så antok at dette fantes i shell-scripting også.

Går det ann å da f.eks. opprette en fil som heter "shell_counter.dat" og bruke den til å se hvem sin tur det er å lese?
Hehe, ja, dette blir litt avansert. Klarte å få dette til med C-programmering med mutex-lås, så antok at dette fantes i shell-scripting også.

Går det ann å da f.eks. opprette en fil som heter "shell_counter.dat" og bruke den til å se hvem sin tur det er å skrive?
Kode: Merk alt
#!/bin/bash

function child(){
        for X in {0..6}
        do

                #LES shell_counter.dat
                data = fread(shell_counter.dat)
                if(data == 0)
                do
                        echo "Child"

                        #SKRIV shell_counter.dat
                        fwrite(shell_counter.dat, 1)
                 done
        done
        return 0
}

function parent(){
        for I in {0..6}
        do
                #LES shell_counter.dat
                data = fread(shell_counter.dat)
                if(data == 1)
                do
                        echo "Parent"

                        #SKRIV shell_counter.dat
                        fwrite(shell_counter.dat, 0)
                 done
        done
        return 0
}

#Opprett shell_counter.dat
fwrite(shell_counter.dat, 0)

#Start barnet
child &

# Start foreldre-lokke
parent
Brukerens avatar
solo
Medlem
 
Innlegg: 989
Registrert: 15.10.2003 18:25
Bosted: Larvik

Re: Shell script skal skrive annenhver gang

Innlegg Wi11iam » 07.11.2011 22:44

I såfall kan du bruke miljøvariabler så du slipper å lese og skrive til disk. Det er ikke pent, men skal i prinsippet fungere ja.
Wi11iam
Medlem
 
Innlegg: 189
Registrert: 15.12.2010 10:20

Re: Shell script skal skrive annenhver gang

Innlegg Matsemann » 13.11.2011 12:39

solo skrev:Grunnen er at det skal være to forskjellige prosesser.

Hvorfor er det viktig?

Og to prosesser vil aldri jobbe likt, selv om de gjør identisk jobb. For å passe på at scripts i forskjellige prosesser befinner seg på samme plass må man synkronisere. Så stikkordet her er synchronize, kanskje googling her kan føre til resultater. Evt. tipsene over.
Master i Datateknikk, NTNU
Brukerens avatar
Matsemann
Moderator
 
Innlegg: 2133
Registrert: 05.02.2005 19:13


Gå til Serversideprogrammering og -språk

Hvem er i forumet

Brukere som leser i dette forumet: Google [Bot] og 5 gjester