[sh] Prüfen ob ein prozess aktiv ist?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Eichi, 26.04.2009.

  1. #1 Eichi, 26.04.2009
    Zuletzt von einem Moderator bearbeitet: 26.04.2009
    Eichi

    Eichi Guest

    Hallo zusammen,

    bei all den Tutorials die im Netz zumfliegen wundert es mich, dass es keine genaue beschreibung zu diesem Thema gibt Oo

    naja egal...

    Was ich gerne machen möchte ist eine if-Abfrage, die feststellen soll ob ein Prozess aktiv ist und falls dieser Prozess aktiv ist diesen killen soll. In diesem Beispiel conky.
    Was müsste ich dafür anstelle des dicken Textes einsetzen?

    Code:
    if [ [b]Der Prozess conky aktiv[/b]   ]; then
      sudo killall conky
      echo "\033[31m conky killed"
      exit 1
    else
      echo -e "\033[0m Prozess nicht aktiv"
    fi
    
    if [ [b]Der Process lxpanel aktiv[/b] ]; then
      sudo killall lxpanel
      echo "\033[31m lxpanel killed"
      exit 1
    else
      echo -e "\033[0m Prozess nicht aktiv"
    fi
    echo -e "\033[0m finished"
    
     
  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. #2 bytepool, 26.04.2009
    Zuletzt bearbeitet: 26.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    OS? Shell?

    Ich habe da auch erst letztens mal kurz drueber nachgedacht, und was mir so auf die schnelle einfiel war folgendes:
    Code:
    ps_name="foo"
    if [ $(ps -e | grep -c ${ps_name}) -gt 0 ]; then
        # process ps_name is running, do stuff
    fi
    
    Das sollte mit GNU ps, GNU grep und GNU Bash funktionieren.

    mfg,
    bytepool
     
  4. Eichi

    Eichi Guest

    OS: Ubuntu
    Shell: GNU Bash

    Habe es ausprobiert, zumindest kommt es jetzt soweit, dass conky gekillt wird. Jetzt wird die If-Abfrage aber trotzdem ausgeführt, auch wenn der Prozess conky garnicht gestartet wird


    Code:
    conky: no process killed
     conky killed
    
     
  5. #4 bytepool, 26.04.2009
    Zuletzt bearbeitet: 26.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    da gibt es ein geniales Konzept, das nennt sich Debugging. ;)
    Bei mir funktioniert das Perfekt, ohne mehr Angaben kann ich da auch nix zu sagen. Lass dir einfach mal die wichtigsten Infos ausgeben, und guck was da falsch laeuft...

    Edit:
    Ah, eine Sache faellt mir doch noch ein. Eventuell schliesst er den grep Prozess mit ein, dann muss es natuerlich -gt 1 sein.

    mfg,
    bytepool
     
  6. #5 Eichi, 26.04.2009
    Zuletzt von einem Moderator bearbeitet: 26.04.2009
    Eichi

    Eichi Guest

    hmm das script sieht jetzt so aus:
    Code:
    ps_name="conky"
    if [ $(ps -elf | grep -c ${ps_name}) -gt 1 ]; then
      sudo killall conky
      echo -e "\033[31m conky killed"
      exit 1
    fi
    echo -e "\033[0m finished"
    
    und vom debugger ausgegeben wird:
    Code:
    ps_name="conky"
    + ps_name=conky
    if [ $(ps -elf | grep -c ${ps_name}) -gt 1 ]; then
      sudo killall conky
      echo -e "\033[31m conky killed"
      exit 1
    fi
    ps -elf | grep -c ${ps_name}
    ++ ps -elf
    ++ grep -c conky
    + '[' 1 -gt 1 ']'
    echo -e "\033[0m finished"
    + echo -e '\033[0m finished'
     finished
    
    Mit der information kann ich atm nicht viel anfangen ^^ Ich werde mal nach nem debugger tutorial suchen

    Sorry bin noch neu in sachen shell-scripting =)
     
  7. #6 bytepool, 26.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    das -lf kann man auch weglassen, das steht eigentlich nur fuer extra Formatierung, das habe ich bei meinem obigen Post auch schon angepasst.

    Ich meinte eigentlich auch nicht, dass du extra einen Debugger bemuehen musst. ;)
    Debugging ist allgemein der Prozess Programmfehler zu finden. Debugger koennen dabei sehr hilfreich sein, aber du kannst dir auch einfach mit printlines, bzw. echo statements die wichtigen Infos ausgeben lassen, erst recht wenn es um so etwas triviales geht.

    Aber mich wuerde interessieren wie du jetzt an die Debug Informationen gekommen bist. Kennt Bash da eine extra Option fuer?

    Na, da steht doch das wichtigste, es wird getestet ob 1 groesser 1 ist. Die einzige Frage waere jetzt noch, ob der Prozess da gerade lief oder nicht, aber das wirst du ja wissen. ;)

    mfg,
    bytepool
     
  8. Eichi

    Eichi Guest

    hm ich habe die 1 bei "-gt 1" wieder durch eine 0 ersetzt und jetzt scheint das script zu funktionieren.

    Ich habe im Internet rumgesucht. Da stand, dass man ein script debuggen kann in dem man die option -xv eingibt.

    Also quasi:

    bash -xv scriptname

    Vielen Dank für deine Hilfe =)
     
  9. #8 bytepool, 26.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Ah, cool, ich glaube das habe ich schonmal irgendwo gelesen, aber direkt wieder vergessen. Ich sollte mal versuchen mir das zu merken. ;)

    Gern geschehen. :)

    mfg,
    bytepool
     
  10. Eichi

    Eichi Guest

    Nochmal für alle die es interessiert (oder die sich hierher verirren), das fertige script:

    Code:
    ps_name="conky"
    if [ $(ps -e | grep -c ${ps_name}) -gt 0 ]; then
      sudo killall ${ps_name}
      echo "\033[31m ...${ps_name} killed"
    else
      echo "\033[0m ${ps_name}: killing failed!"
    fi
    echo "\033[0m ...finished"
    
     
  11. #10 daboss, 27.04.2009
    Zuletzt bearbeitet: 27.04.2009
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Tut's nicht auch ein einfaches
    Code:
    if [ $(pgrep conky) ]; then ....
    
    ?
     
  12. #11 bytepool, 27.04.2009
    Zuletzt bearbeitet: 27.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    wenn man pgrep kennen wuerde, waere das sicherlich die bessere Wahl, ja. ;)

    Danke, wieder was gelernt. Wobei einfach nur "if [ $(pgrep foo) ]" zu Syntax Fehlern fuehren wird. Aber das ist ja leicht anzupassen, z.B. mit "[ -z $(pgrep foo) ]".
    Oder noch simpler, mit "if $(pgrep foo)", was du wahrscheinlich auch meintest.

    Edit:
    Ehh, "if pgrep foo" natuerlich, nicht if $(pgrep foo)... Dann bekommt man aber auch noch den output davon zu sehen, so gesehen ist der Test mit -z vielleicht doch schoener. Ich stell mich ja schon in die Ecke. ;)

    mfg,
    bytepool
     
  13. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  14. #12 daboss, 27.04.2009
    Zuletzt bearbeitet: 27.04.2009
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Hm, also "hier" funktioniert ein
    Code:
        if [ ! "$(pgrep boinc)" ]; then ....
    (Weiß garnicht mehr, warum ich so rum prüfe... aber's funktioniert auch andersrum :)
    Code:
    {-alex-|-asterix-} => [~]
    (12:33:55) if [ $(pgrep firefox) ]; then echo "juhu"; else echo "blub"; fi;
    juhu
    {-alex-|-asterix-} => [~]
    (12:35:37) if [ $(pgrep dasIstGarKeinProzess) ]; then echo "juhu"; else echo "blub"; fi;
    blub
    
    )

    /Edit: Eigentlich dachte ich sogar, das du mich mal drauf hingewiesen hattest, deswegen hab ich mich bissl gewundert :D Aber's war Aqualung hier.
     
  15. #13 bytepool, 27.04.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Tatsaechlich, [ ] akzeptiert auch leere Argumente... Wie gut dass ich schon in der Ecke sitze. ;)

    mfg,
    bytepool
     
Thema:

[sh] Prüfen ob ein prozess aktiv ist?

Die Seite wird geladen...

[sh] Prüfen ob ein prozess aktiv ist? - Ähnliche Themen

  1. LiMux: Expertengruppe soll mögliche Rückkehr zu Windows prüfen

    LiMux: Expertengruppe soll mögliche Rückkehr zu Windows prüfen: Das von Münchens ehemaligem Oberbürgermeister Christian Ude eigentlich als abgeschlossen erklärte Migrationsprojekt sämtlicher 15000 PCs der...
  2. IF- Anweisen auf einen Bereich prüfen

    IF- Anweisen auf einen Bereich prüfen: Hallo zusammen, kann man in einer IF- Anweisen auf einen Bereich prüfen, z.B. wenn Wert zwischen 7 bis 15 liegt dann … sonst nix :) ? Im...
  3. Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt

    Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt: Hallo, ich bräuchte eine Funktion die prüft ob ein Datum im Format tt.mm.JJJJ innerhalb der letzten 2 Wochen liegt. Oder anders ausgedruckt, ob...
  4. mit einem prüfbefehl mehrere verzeichnisse prüfen (z.b ../check_disk -w 1000 -c 2000)

    mit einem prüfbefehl mehrere verzeichnisse prüfen (z.b ../check_disk -w 1000 -c 2000): hallo leute, wie kann ich mit nur einem prüfbefehl mehrere verzeichnisse auf ihre belegung abfragen und dazu noch schwellwerte vergeben ? bis...
  5. Auf Prozess prüfen vor Shutdown

    Auf Prozess prüfen vor Shutdown: Hi, da ich auf einem Debian noch mehrere virtuelle Maschinen betreibe ist das mit dem shutdown manchmal recht ungünstig, da der eine oder andere...