Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Multithreading in Shell

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Ort
    Schierling
    Beiträge
    9

    Multithreading in Shell

    Hallo Forum,

    Ich hab jetzt mal ne Frage:
    Ist es möglich, dass man in einem Script eine Ausgabe macht, während ein anderer Befehl / Funktion läuft?

    ich habe sowas gebaut, funktioniert so aber leider nicht:

    Code:
    kreisel(){
    printf " "
    while [ $RETVAL -ne 0 ] ; do
            printf "\b|"
            sleep 0.1
            printf "\b/"
            sleep 0.1
            printf "\b-"
            sleep 0.1
            printf "\b\\"
            sleep 0.1
            printf "\b|"
            sleep 0.1
            printf "\b/"
            sleep 0.1
            printf "\b-"
            sleep 0.1
            printf "\b\\"
            sleep 0.1
            printf "\b|"
            sleep 0.1
    done
    printf "\b"
    }
    echo -ne "Running...     "
    while $(anwendung ; RETVAL=$(echo $?)) ; do
    kreisel
    done
    echo ""
    Als Ausgabe sollte jetzt am Terminalfenster "Running... " und ein drehendes "|" zu sehen sein. Es erscheint das "Running..." dann lange nichts und dann auf ewig der Kreisel. Was mache ich falsch?

    Gruß

    Kees

  2. #2
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    dein anwedung wird ausgeführt, sobald sie zuende ist erscheint
    dein kreisel.


    was du machen musst ist einen Prozess erzeugen der den Kreisel zeugt
    udn diesen bei beendigung der anwendugn killen

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ich glaube was du suchst sind job Controls
    Siehe: info bash "Job Control"
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Ort
    Schierling
    Beiträge
    9
    Hi,

    Jobs ist ein Weg, der Funktioniert.
    Ich habe jetzt quasi 2 Funktionen gebaut

    Code:
    funkion1() {
     Befehl ; RETVAL=$(echo $?)
     return $RETVAL
    }
    
    kreisel(){
    RETVAL1=0
    funktion1 > /dev/null 2> /dev/null &
    printf " "
    while [ $RETVAL1 -ne 1 ] ; do
            jobs | grep -i Running ; RETVAL1=$(echo $?)
            printf "\b|"
            sleep 0.1
            printf "\b/"
            sleep 0.1
            printf "\b-"
            sleep 0.1
            printf "\b\\"
            sleep 0.1
    done
    Leider kann ich den Rückgabewert der Funktion1 nicht verwenden. Ein "export RETVAL=$(echo $?)" hat leider auch nicht zum gewünschten ergebnis geführt.

  5. #5
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    Zitat Zitat von Kees_23 Beitrag anzeigen
    Leider kann ich den Rückgabewert der Funktion1 nicht verwenden.
    Wenn du mal auf den Funktionsnamen guckst, weißt du, warum .

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Ort
    Schierling
    Beiträge
    9
    Oh, der berühmte Tippfehler beim Abtippen. Schande über mich ;-)

  7. #7
    Registrierter Benutzer
    Registriert seit
    14.05.2009
    Ort
    Schierling
    Beiträge
    9
    Mir ist gerade aufgefallen, dass ich die retvals nicht bekomme wenn ich die funktion1 in den Hintergrund schicke :-(

  8. #8
    Registrierter Benutzer
    Registriert seit
    14.01.2002
    Beiträge
    657
    du musst mit prozesskontrolle arbeiten. such nach stichwörtern

    SIGCHLD, wait, waitpid und trap

    viel erfolg.

  9. #9
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Am besten du siehst dir das mal an

    PHP-Code:
    #!/bin/sh

    count=0

    function schlaefer()
    {
      echo 
    "Start $count"
      
    sleep 10
      
    echo "Closed $count kommt nicht an weil kill"
    }

    # Hintergrund-Job starten
    schlaefer &

    # ID Speichern
    id=%+

    ## etc ...
    for i in `seq 0 9` ; do
      echo 
    "----" $i
    done

    # den Job mit id beenden
    kill $id 
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  10. #10
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    PS: Hatte etwas vergessen
    Du mußt die job Steuerung auch einschalten.
    PHP-Code:
    #!/bin/sh 

    set -m

    count
    =0

    function schlaefer() 
    {
      echo 
    "Start $count
      
    sleep 10 
      
    echo "Closed $count kommt später an" 
    }

    # Hintergrund-Job starten 
    schlaefer 

    jobs

    ## etc ... 
    for i in `seq 0 9` ; do 
      echo 
    "----" $i
    done

    fg 
    %
    Ausgabe:
    Code:
    [1]+  Läuft                  schlaefer &
    Start 0
    ---- 0
    ---- 1
    ---- 2
    ---- 3
    ---- 4
    ---- 5
    ---- 6
    ---- 7
    ---- 8
    ---- 9
    schlaefer
    Closed 0 kommt später an
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •