[BASH] Frickler-Pipes

  • Hallo zusammen,


    heute habe ich mich gefragt, wie man feststellen kann, ob bestimmte Prozesse oder eigene Anwendungen noch laufen. Wenn man die Programme namentlich kennt, dann kan man mit [font="Courier New"]pidof[/font] die Prozess-ID (PID) erhalten.


    Was macht man aber, wenn man eine PID-Liste hat und den einzelnen Prozessen irgendwelche Signale senden möchte? Dazu muss überhaupt erstmal bekannt sein, ob die PID-Liste noch aktuell ist.

    Code
    1. ps -o pid= -p <PID>


    Läuft der Prozess mit der PID <PID>, dann meldet das obige Linux-Kommando die betreffende PID zurück.
    Existiert der Prozess nicht mehr, erfolgt keine Rückmeldung.


    Und wo ist jetzt die Eingabe-/Ausgabe-Weiterleitung?


    :( Das ist dann zwar keine Pipe, aber ich finde das Linux-Kommando trotzdem passend, um hier aufgenommen zu werden. ;)



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Nicht schlecht :thumbs1: ,
    ich hätte da noch pgrep zu bieten (nehme ich meist, bin schreibfaul :D):



    Dein Beispiel wäre dann:

    Code
    1. > pgrep -s <PID>


    Nett auch:


    Code
    1. pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi



    Die bash ist doch was cooles :bravo2: ... :thumbs1:

  • Hi Zentris,


    über [font="Courier New"]pgrep[/font] bin ich danach auch noch gestoßen. Da ich kein ausgewiesener Freund regulärer Ausdrücke bin udn meine ersten drei Versuche, pgrep irgendwas Gehaltvolles zu entlocken, doch recht kläglich verliefen, habe ich es bei dem oben belassen.


    Aber vielen Dank für Deine Lösung, die auf pgrep zur gleichen Erkenntnis kommt.
     

    Quote from &quot;Zentris&quot; pid='294342' dateline='1502047508'


    Nett auch:


    Code
    1. pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Na, da hört's dann aber auch auf! ;) Das habe ich vorhin auch irgendwo gefunden...



    Quote from &quot;Zentris&quot; pid='294342' dateline='1502047508'


    Die bash ist doch was cooles :bravo2: ... :thumbs1:


    Ja, wenn sich jeder damit besser auskennen würde, dann würden viel mehr Leute für kleine Tools auch mal BASH eine Chance geben. Und wenn ich erst mal in Rente bin, dann lese ich mir auch mal die BASH-Bücher durch... versprochen!



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Quote from &quot;Andreas&quot; pid='294347' dateline='1502048217'
    Code
    1. pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Na, da hört's dann aber auch auf! ;) Das habe ich vorhin auch irgendwo gefunden...


    Nix da "gefunden", :lol:
    das hab ich vor Ewigkeiten mal geklöppelt... für was ganz anderes... ist aus einem größerem Script gerissen :-)

  • Hi Zentris,


    hier habe ich das "gefunden":


    Code
    1. command="httpd"
    2. running=`ps ax | grep -v grep | grep $command | wc -l`
    3. if [ running -gt 0 ]; then
    4. echo "Command is running"
    5. else
    6. echo "Command is not running"
    7. fi


    hat schon strukturelle Ähnlichkeit zu


    Quote from &quot;Zentris&quot; pid='294360' dateline='1502049792'
    Code
    1. pgrep -s <PID> > /dev/null; if [ $? -eq 0 ]; then echo "gibts";  else echo "gibts nicht"; fi


    Nix da "gefunden", :lol:
    das hab ich vor Ewigkeiten mal geklöppelt... für was ganz anderes... ist aus einem größerem Script gerissen :-)


    Jetzt werde ich aber meine strukturelle Ähnlichkeit mit dem Bett steigern. Morgen 5:30 wird der Wecker klingeln.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Alternativ geht

    Code
    1. if pgrep -s <PID> > /dev/null; then echo "gibts";  else echo "gibts nicht"; fi

    . Ich finde das liest sich etwas leichter :)

    >>> Sichere Deine Raspberry regelmäßig im laufenden Betrieb mit raspiBackup <<<


    Produktion: Pi 1B (Cups, Pilight), Pi 1B (NFS Server, rsync Server, OpenVPN Server, PiHole mit DoH), Pi 3B (Seafile)
    Test & Spielwiese: Pi 3B (raspiBackup Testsystem), Pi 1B (GPIO Spielzeug)


    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

  • Quote from &quot;Andreas&quot; pid='294366' dateline='1502050548'


    hier habe ich das "gefunden":


    Code
    1. command="httpd"
    2. running=`ps ax | grep -v grep | grep $command | wc -l`
    3. if [ running -gt 0 ]; then
    4.    echo "Command is running"
    5. else
    6.    echo "Command is not running"
    7. fi


    hat schon strukturelle Ähnlichkeit zu
    ...


    Fehler: :lol:
    if [ $running -gt 0 ]; then...


    Klar, das "Konzept" (Abfrage des Rückgabeparameters eines Kommandos und anschließender Interpretation) gibt ja nicht viel Variationsbreite her :lol:

  • Wenn's nur um den Returncode geht, tut's statt "pgrep -s <PID>" auch ein simples "ps <PID>". Also z.B.


    Code
    1. if ps <PID> > /dev/null; then echo "gibts"; else echo "gibts nicht"; fi
  • Hallo zusammen,


    für eine aktuelle Entwicklung muss ich feststellen, ob in einem Verzeichnis eine neue Datei dazugekommen ist, die innerhalb der Ereignisbehandlung mit aufgenommen werden soll.


    Folgende Pipe ermittelt Datum und Uhrzeit der aktuellen Datei im Zielverzeichnis.

    Code
    1. ls -cAlt --time-style=long-iso | head -n2 | tail -n1 | awk {'print $6 " " $7'}


    Ergebnis ist z.B.

    Code
    1. 2017-09-17 13:00


    Dieses Ergebnis kann ich einlesen, mit der aktuellen Systemzeit vergleichen und ggf. entsprechende Aktionen folgen lassen.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Quote from &quot;Andreas&quot; pid='300158' dateline='1505646624'
    Code
    1. ls -cAlt --time-style=long-iso | head -n2 | tail -n1 | awk {'print $6 " " $7'}


    Oder kürzer:


    Code
    1. ls -cAltr --time-style=long-iso | tail -n1 | awk {'print $6 " " $7'}
  • Quote from &quot;Andreas&quot; pid='300158' dateline='1505646624'

    für eine aktuelle Entwicklung muss ich feststellen, ob in einem Verzeichnis eine neue Datei dazugekommen ist, die innerhalb der Ereignisbehandlung mit aufgenommen werden soll.


    incron - cron-like daemon which handles filesystem events
    Automatisch zusammengefügt:[hr]

    Quote from &quot;Manul&quot; pid='300166' dateline='1505648738'


    Oder kürzer:


    Code
    1. ls -cAltr --time-style=long-iso | tail -n1 | awk {'print $6 " " $7'}


    Oder kürzer:


    Code
    1. ls -cAltr --time-style=long-iso | awk 'END{print $6 " " $7}'


    Allgemein wäre ich vorsichtig, die Ausgabe von "ls" weiter zu verarbeiten. Zu viele Fallen lauern (LANG, IFS, etc.), wenn kein definiertes Environment besteht.

    "Wenn du nichts zu sagen hast, sag einfach nichts!"


    Edited once, last by llutz ().

  • Links in Beitrag #1 korrigiert

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo zusammen,


    momentan bin ich dabei, meine knapp 6000 Beiträge in diesem Forum anzuschauen und die Links des alten Forums in das neue Forum zu ändern. Abgesehen, dass es eine Schweinearbeit ist und ich jetzt noch ca. 2000 Beiträge durchgehen muss, habe ich dabei doch einige Beiträge "wiedererentdeckt". Einer davon ist eine Pipe, die die größten z.B. 100 Dateien des Dateisystems ermittelt. Diese Pipe ist z.B. dann sinnvoll, wenn man feststellt, dass der Speicherplatz auf der SD-Karte, der Festplatte oder der SSD zur Neige geht - man aber keine Vorstellungen hat, welche Dateien denn so groß (geworden) sind.


    Code
    1. sudo du --block-size=MiB --max-depth=10 | sort -rn | head -n 100


    Bevor man diese Pipe startet, gilt es den Tip von linusg zu berücksichtigen, nämlich per cd /Pfad/zum/Ausgangsverzeichnis in das Verzeichnis zu wechseln, ab dem man diese 100 größten Dateien ermitteln möchte.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Hi Andreas,


    cool, was du da ausgegraben hast! Kurze Ergänzung: am besten aus dem Wurzelverzeichnis / starten (da bin ich reingetappt). Auf meinem Rechner (nicht Pi) habe ich es eben mal suchen lassen - es dauert noch :shy:


    LG

    :wink:

  • Hallo linusg,


    ja, das mit dem Startverzeichnis ist ein so guter Einwand, dass ich ihn gleich in #33 aufgenommen habe. Startet man aber bei /, dann muss man da echt Geduld mitbringen.


    Aber das Ergebnis ist eine gute Informationsquelle bei solchen Problemen.



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Und für Leute, die das wilde Umherspringen im Dateisystem nicht mögen:

    Code
    1. sudo du /startpfad --block-size=MiB --max-depth=10 | sort -rn | head -n 100

    "Wenn du nichts zu sagen hast, sag einfach nichts!"


  • Hallo zusammen,


    im Dezember habe ich den Auftrag bekommen, ein Reinraum-Monitoring-Programm zu entwickeln. Das Programm macht schon lange, was es soll. Aber ein paar Paranoia sollen noch hinein.


    Eines davon besteht darin, einen Controller auszulesen, auf dem die Daten gesammelt weden. Diese Daten landen in einem Download-Verzeichnis der Anwendung. Um zu verhindern, dass irgendjemand eine manipulierte Version der Daten bereitstellt, die dann von der Anwendung verarbeitet werden, soll das Download-Verzeichnis einfach gelöscht werden, wenn mehr als eine Datei vorhanden ist - anstatt sich mit der Frage zu quälen, welche von beiden Dateien nicht manipuliert sein könnte.


    Frickler-Pipe:

    Code
    1. find .../MCM_Download -type f | wc -l"

    ermittelt die Anzahl der Dateien im anwendungseigenen Download-Verzeichnis.


    Und in Icon sieht das dann so aus [Code-Ausschnitt]


    Statt ... steht dann natürlich der Pfad zum Verzeichnis.

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.