Prozesse einzelnd einlesen !



  • Also ich erwarte auf jeden Fall keine vollständige Lösung!
    Und das mit den NodeList wird dann auch meine Aufgabe sein.
    Ich weis jetzt nur nicht wie das einlesen der Prozesse unter
    Linux funktioniert.Ich möchte dann z.B einzeln alle Prozesse
    einlesen und sie dann Ausgeben.Mit lesen mein ich das ich dann
    alle Prozesse irgendwie habe und dann gezielt auf eins zugreifen
    kann.Wenn ich einfach nur ps -A werden mir alle Prozesse angezeigt
    kann aber nicht einzelnd damit was machen.
    z.B. dann einzelnd jedes Prozess untereinander in ein textdatei
    speichern.

    Entschuldigung wenn ich mich falsch formuliert habe.


  • Mod

    Die Prozesse stehen in /proc. Falls du mehr Details wissen möchtest als nur die Prozess-ID ist das Format auch dokumentiert, das meiste solltest du dir aber auch selbst erschließen können. Die Verzeichniseinträge und Inhalte kannst du mit den (dir hoffentlich) bekannten Methoden lesen. Auch einzeln (genauer gesagt müsste ich jetzt erst einmal nachdenken, ob und wie das auch nicht-einzeln ginge). Diese Methode ist meines Wissen nach auch das, was z.B. ps oder ähnliche Tools benutzen (übrigens ist die Ausgabe von ps sehr wohl getrennt. Stehen schließlich newlines zwischen den Prozessen).

    edit: Hier auch noch der Quellcode von ps und ähnlichen Tools:
    http://procps.sourceforge.net/index.html



  • Also ich möchte einfach ein Programm womit ich die Prozesse
    untereinander in einer Text datei speicher.


  • Mod

    system("ps -aux > textdatei");
    


  • Ich bastle an einer Bibliothek, die unter Anderem genau das kann.
    Implementierung sieht so aus: https://github.com/Ethon/Berry/blob/master/src/linux/process_entry.cpp



  • Ich habs jetzt so gemacht !

    int ShowProzess()
    {
        ofstream fout("Prozesse.txt");
        return system("ps -Al > Prozesse.txt");
    }
    
    void ProzessWindow::OnClickButtonOK(wxCommandEvent &event ) {
       string n;
       ShowProzess();
       ifstream fin("Prozesse.txt");
       while(fin>>n && fin.ignore(1000))
       {
       wxString mystring(n.c_str(), wxConvUTF8);
       textctrl->AppendText(mystring);
       }
    }
    

    Jetzt möchte ich das es die Prozesse im TextCrl untereinander anzeigt tut es aber nicht ..... Er zeigt nur eine Zeile an fertig..


  • Mod

    Das ist doch nicht dein Ernst 😮 . Kannst du eine Scherzlösung nicht als solche erkennen?

    Guck dir doch wenigstens mal die Grundlagen der Linux-"System"programmierung an. Wie man mit Verzeichnissen umgeht, etc. Oder eben Boost, wie es Ethon benutzt, das kommt in C++ schöner. Und lern auch ganz allgemein die Grundlagen von C++, denn wenn ich while(fin>>n && fin.ignore(1000)) sehe, dann weiß ich sofort, dass du hier total überfordert bist. Wenn ein Programm zu schwierig ist, dann ist es ja in Ordnung zu Fragen, aber man muss genügend Grundlagen können, um überhaupt die Antworten zu verstehen! Und diese Grundlagen zu lernen, dafür ist jeder selber verantwortlich, das kann das Forum nicht für jeden Neuling erledigen. Es ist ja nix schlimmes, nicht zu wissen, woher man Prozessinformationen bekommt, aber nach den Schlagworten in meiner ersten Antwort (Verzeichnis, Dateien, ...) hättest du eigentlich wissen müssen, was zu tun ist.



  • Hmm Mir faellt nicht einw as ich der whileschleife sagen soll wie lange die sich
    bewegen soll. -.-



  • Liest du überhaupt was andere dir schreiben/sagen? Anscheinend nicht.

    Und bitte, schreibe mal richtig, deine Texte sind immer furchtbar zu lesen.



  • Natürlich lese ich was ihr mir schreibt.
    Nur ich bin gerade dabei die Grundlagen zu lernen von
    Linux "System" programmierung .Da man beim anwenden am besten lernen
    kann dachte ich an so ein Programm.Wenn ihr meint das,dass nichts wird...
    Was könnt ich den sonst so programmieren ich suche ein Project.


  • Mod

    Lös Fragen hier im Forum! Jeden Tag 3-4 neue Projekte, die sich schnell abschließen lassen. Und du kannst deine Ergebnisse direkt mit anderen vergleichen und falls dicke Hauer in deiner Lösung sind, bekommst du das auch mehr oder weniger unhöflich gesagt.


Anmelden zum Antworten