Programm nach bestimmter Zeit toeten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von mythos, 14.07.2009.

  1. #1 mythos, 14.07.2009
    Zuletzt bearbeitet: 14.07.2009
    mythos

    mythos Mitglied

    Dabei seit:
    20.09.2005
    Beiträge:
    27
    Zustimmungen:
    0
    Hallo,

    ich moechte ein bestimmtes Programm hoechstens 10s ausfuehren. (Die 10s muessen nicht exakt eingehalten werden; es koennen auch 8 oder 12s sein.) Wenn das Programm in dieser Zeit nicht beendet wurde, soll es getoetet werden. Wie kann man das einfach in Form eines Shell-Scripts implementieren?

    mfg mythos
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Gast1

    Gast1 Guest

    Schnellschuss (aus dem Kopf):

    IIRC spuckt die Variable $! die PID eines Programmes aus, danach noch $! als Variable IRGENDEIN_NETTER_NAME definieren, ein sleep von X Sekunden und kill $IRGENDEIN_NETTER_NAME.
     
  4. #3 floyd62, 14.07.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    ... oder du legst beim Start deines Skripts einen Killer in den Hintergrund, der nach 10 Sekunden nachschaut, ob noch wer da ist:
    Code:
    #!/bin/sh
    
    ( sleep 10; kill -0 $$ && kill -HUP $$ ) &
    
    # ab hier dann das eigentliche Programm, z.B. ...
    
    I=30
    while [ $I -gt 0 ]; do
            echo $I
            sleep 1
            I=`expr $I - 1`
    done
    
     
  5. mythos

    mythos Mitglied

    Dabei seit:
    20.09.2005
    Beiträge:
    27
    Zustimmungen:
    0
    Hallo!

    Vielen Dank fuer eure Antworten. Ich habe nun folgendes versucht:

    Code:
    #!/bin/bash
    ./blackbox &
    sleep 10; kill $!
    
    Nach 10 Sekunden erhalte ich zwar die Kontrolle ueber die Shell wieder. Jedoch sagt mir top, dass der Prozess blackbox ueberlebt hat.

    mfg mythos
     
  6. Gast1

    Gast1 Guest

    So killst Du auch nach 10 Sekunden nicht "blackbox" sondern das letzte Kommando vor dem "kill" also "sleep".

    Code:
    #!/bin/bash
    
    ./blackbox &
    
    NETTER_NAME_FUER_EINE_VARIABLE=$!
    
    sleep 10
    
    kill $NETTER_NAME_FUER_EINE_VARIABLE
     
  7. mythos

    mythos Mitglied

    Dabei seit:
    20.09.2005
    Beiträge:
    27
    Zustimmungen:
    0
    Ah, das hab' ich bereits vermutet; gut zu wissen. Aber diese Variante funktioniert auch nicht.

    Wuerde man 'kill $var' in 'killall blackbox' umschreiben, funktioniert es interessanterweise. Jedoch will ich nicht, dass alle blackbox-Programme beendet werden, sondern nur dieses eine, das laenger als 10 Sekunden braucht.

    mfg mythos
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. Gast1

    Gast1 Guest

    Gegenbeweis:

    Code:
    #!/bin/bash
    ping localhost &
    
    pingpid=$!
    
    sleep 10
    
    kill $pingpid &>/dev/null && echo "killed"
    
    exit 0
    und

    Code:
     sh /tmp/test.sh 
    PING localhost (127.0.0.1) 56(84) bytes of data.
    64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.053 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.061 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.068 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.068 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.073 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.069 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=7 ttl=64 time=0.069 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=8 ttl=64 time=0.065 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=9 ttl=64 time=0.068 ms
    64 bytes from localhost (127.0.0.1): icmp_seq=10 ttl=64 time=0.069 ms
    killed
     
  10. #8 mythos, 14.07.2009
    Zuletzt bearbeitet: 14.07.2009
    mythos

    mythos Mitglied

    Dabei seit:
    20.09.2005
    Beiträge:
    27
    Zustimmungen:
    0
    Ich habe eine Vermutung: Der blackbox-Prozess den ich via top sehe, ist ein Kind-Prozess vom Programm blackbox, das ich zuvor getoetet habe.

    Das funktioniert naemlich:
    Code:
    ./blackbox &
    pid=$!
    sleep 10
    for i in `ps -ef| awk '$3 == '$pid' { print $2 }'`
    do
        kill $i
    done
    
     
Thema:

Programm nach bestimmter Zeit toeten

Die Seite wird geladen...

Programm nach bestimmter Zeit toeten - Ähnliche Themen

  1. Programme nach Sitzungstrennung

    Programme nach Sitzungstrennung: Hallo, ich selber habe KDE 3.5 auf meinem Linux Server laufen. Nun habe ich aber folgende Frage. Ist es denn möglich eine Sitzung weiterlaufen zu...
  2. Nach Ati Treiber keine Effekte + Programm Abstürtze

    Nach Ati Treiber keine Effekte + Programm Abstürtze: Morgen ! Hab so eben die ATI Treiber auf meinem System installiert. Das hat auch alles geklappt und 3D Support funktioniert (habs bei GOogle...
  3. [Frage] Programme nach Bootvorgang starten

    [Frage] Programme nach Bootvorgang starten: Hallo, wie kann man erzwingen, dass Programme, zB Skype oder Gaim, direkt nach dem Booten gestartet werden? Danke, Dizzy
  4. Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich

    Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich: Hallo Zusammen Ich bin hier neu und muss schon von beginn an sagen, dass ich ein ziemlicher Anfänger bin was das Scripten an geht. Hatte mal...
  5. Programme starten erst nach einigen Minuten

    Programme starten erst nach einigen Minuten: Guten Abend Unix Community Hab mich gerade erst angemeldet und natürlich auch gleich mit einer Frage -.- Folgendes Problem: Wenn ich...