Befehlssequenz

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von Wetman75, 04.04.2015.

  1. #1 Wetman75, 04.04.2015
    Wetman75

    Wetman75 Grünschnabel

    Dabei seit:
    04.04.2015
    Beiträge:
    1
    Zustimmungen:
    0
    Hallo zusammen,

    Ich bin ein Anfänger der Unix-Sprache und versuche gerade eine Befehlssequenz zusammen zu schustern, welche mir alle laufenden Prozesse anzeigt welche zum Beispiel seit 9:00Uhr laufen.

    Mein Ansatz:
    #ps -A | grep 11:

    Also, Abfrage aller laufenden Prozess und in die pipe legen und mit grep Zeilen mit dem Merkmal "11:" anzeigen.
    Ist das so richtig?
    Wenn ja, was ist aber wenn es nun 18:00 Uhr ist. So sehe ich ja nicht die Prozesse welche zum Beispiel um 14:00 gestartet wurden.

    LG
     
  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 Programmer78, 04.04.2015
    Programmer78

    Programmer78 Foren As

    Dabei seit:
    28.11.2007
    Beiträge:
    93
    Zustimmungen:
    1
    Hab jetzt auch nicht richtig nachgesehen, vielleicht hat der Befehl ps auch so eine Funktion, die nur Prozesse ab einer bestimmten Uhrzeit herausfiltert.

    Anleitungen, die dir bei solchen Befehlszeilen helfen können findest du mit

    Code:
    man Befehlsname
    #also
    man ps
    
    Falls das bei dir alles in Englisch ist, es lassen sich auch deutsche Manualseiten installieren. Aber nicht alle sind in Deutsch verfügbar.

    In der Shell kann man sich immer irgendwie helfen. Linux ist da sehr vielseitig, allein schon mit den vielen bereits installierten Programmen.

    Lösungsmöglichkeiten gibt es einige, die einen sind länger, die anderen kürzer, je nach dem wie man es löst. Dazu lernt man immer. Vieles geht in einer Zeile.

    Code:
    seitUhr=9 ; for i in `seq $seitUhr 23` ; do ps -A -f | egrep "$i\:[0-5][0-9] " | grep -v egrep ; done
    (Problem hier, wenn es auf 0 Uhr zugeht oder der Rechner mehrere Tage läuft...) Das soll nur ein Beispiel sein, deshalb ist es möglichst einfach gehalten.

    Das erste Simikolon leitet den nächsten Befehl ein. Die nachfolgenden Simikolon gehören zur Schleife.

    #Variablenzuweisung
    seitUhr=9

    #Für jeden Wert mache ... Eine übliche for-Schleife
    for i in `9-23` ; do ... ; done

    #solche `-Zeichen haben auch nochmal eine Bedeutung. Man kann auch $(aufgelöster Befehl) schreiben.
    `aufgelöster Befehl`

    #Zahlenreihe ausgeben
    seq 9 23

    #Variablen Abruf
    $seitUhr

    #Prozesse ausgeben mit Option -f (full Format -- volles Format)
    ps -A -f |

    #Filtern mit egrep, weil Bereiche mit angegeben sind ( [0-5] ) ... filtert nach z.B. "9:35Leerzeichen"
    egrep "$i\:[0-5][0-9] "

    #Filtert alles erneut, um die eigenen egrep-Prozesse auszublenden. -v = alles außer ...
    | grep -v egrep


    man ps zeigt dir auch, dass du dir das Format der Tabelle selbst definieren kannst, welches ps ausgibt. Das ginge dann z.B. so.
    Code:
    ps axo stat,pid,pcpu,comm,start_time
    
    start_time ist hier dein Bezugswert.

    Um so mehr man rumprobiert, umsomehr versteht man. Im internet ist auch vieles beschrieben. Die individuellen Lösungen lassen sich meistens daraus zusammensetzen. Viel Spass!
     
  4. #3 schwedenmann, 04.04.2015
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.635
    Zustimmungen:
    2
    Ort:
    Wegberg
    Hallo

    Andere Möglichkeit, über journalctl, wenn systemd benutzt wird, damit ist das Filtern einfacher als per ps, | grep, sed und Konsorten

    mfg
    schwedenmann
     
Thema:

Befehlssequenz