pid zu prog.-name herausfinden



  • hi,

    im verzeichnis /proc befinden sich ja sämtliche pid' s zu den laufenden prozessen inform von ordnern.
    wie kann ich in c in der art wie der systemaufruf killall prog.-name die pid zu den einzelnen programmen herausfinden und diese dann killen?

    cu...



  • nehme an du arbeitest mit UNIX/LINUX
    da gibt nen Systemaufruf:

    getpid
    

    gib auf der console unter LINUX/UNIX mal ein : man getpid

    auf der manpage stehen dann noch weiterfuehrende Informationen zu Prozessmanagement

    Gruss sclearscreen 👍



  • koenntest diese Verzeichnis und die dortige Information aber auch per Shellskript umbiegen,
    und mit sed und awk die Information über
    Kommandoumlenunk und Pipeing beeinflussen, filtern etc

    so long sclearscreen 🙂



  • das ist wieder sehr linux-spezifisch und hat nichts mit ANSI C zu tun...

    Bei solchen Aufgaben empfiehlt es sich einfach mal in den Quelltext der jeweiligen Programme zu gucken. In diesem Fall killall. Habe ich grade mal gemacht. Dort werden die PID-Verzeichnisse in /proc/ abgesucht (bzw. /proc/<pid>/cmdline).

    Ich würde aber einfach killall über exec*() aufrufen. Ersparst du dir ne Menge Arbeit.



  • hi,

    getpid bringt mir leider nicht viel, da dieser nur die pid vom aktuell laufenden programm zurückgibt.

    @DrGreenthumb: das dacht ich mir bald schon. ich habe mir die sache mal angesehen, also cmdline enthält nicht den namen des programms, jedoch status enthält diesen.
    also müsste ich sämtliche verzeichnisse innerhalt von prog und wiederum innnerhalb von z.b. status nach den jeweiligen programmnamen suchen.

    naja, was anderes wird mir wohl nicht übrig bleiben...

    cu...

    edit: exec bringt mich auch nicht weiter, da ich mein programm noch nicht beenden möchte. meines erachtens ersetzt ja exec den aktuellen programm-pid (mein programm) durch einen neuen.



  • nun es gäbe da noch den

    system("...");
    

    - Aufruf
    wenn du genügend Rechte hast kannst Du folgendes tun:

    system("ps -a > datei_deiner_wahl.txt");
    

    Jetzt stehen in der Datei alle Prozesse mit Ihrer PID!

    Die datei kannste jetzt nach deinen Belieben nach gewünschten Informationen
    durchparsen!
    Und mit den gewonnen Infos kannste alle möglichen Kasperkram anstellenen.
    Wenn Du willst auch wieder ueber:

    system("irgend nen sinnvolles Konsolenkommando");
    

    Also ich hab jetzt mal kurz in meinem Buch von Helmut Herold "
    Linux/Unix Systemprogrammierung" geblättert und ne bessere Lösung fällt
    mir nisch ein! Diese Lösung baut jedenfalls nur auf Bausteinen auf die das System auch
    Bereitstellt und ist deshalb sinnvoll!

    Mit fruendlichen Grüssen 🙂



  • hi,

    daran dachte ich auch schon und mir fiel noch was ein:

    evtl. mittels freeopen die pipe stdout umleiten (ipc - das habe ich aber noch nicht gemacht) und dann die ausgabe abfangen.
    geht das überhaupt?

    obwohl ich jedoch das mit der ausgabeumlenkung in eine datei favorisiere, da dies wahrscheinlich nicht allzuviel code nachsichziehen wird 😃

    was wäre die bessere wahl, wenn das programm nicht allzu groß werden soll?

    cu...



  • ipc - das habe ich aber noch nicht gemacht

    geht mir genauso!
    Sicherlich wäre das nen Weg der interessant wär!
    Aber mal ehrlich extra nen C - Programm dafür entwickeln ist wie nen Rad neu erfinden und mit Kanonen nach spatzen zu schiessen?!

    Es sei denn Du willst was übers OS lernen! Statt direkt nen C - programm zu entwicklen was dies macht. Würde nen Shellskript voll und ganz reichen.
    könnte natürlich auch sein Du stehst nicht so auf Shellskripte? bedenke auch das ein Shellskript auf jedes UNIX - Derivat besser portierbar ist als nen ausführbares
    Programm.

    Und wenn's denn unbedingt nen Progamm sein soll würde der Weg über

    system("...");
    

    voll und ganz reichen. das würde dir nen funktionierente Referenz bringen an der sich später Lösungen messen lassen würden.

    Probier das mit

    freopen(...);"
    

    doch erstmal in nem simplen Testprogamm aus, was mittels

    fork(...);
    

    nen Sohn erzeugt!
    Vater schreibt was in die Pipe Sohn holtes aus der Pipe dann lernt man
    Sinn und Leistung des Piping besser kennen. 👍

    Mit freundlichen Grüssen 🙂



  • was mich wundert das dieser Thread noch nicht im Sub - Forum Linux/Unix
    gelandet ist, egal das machen die Moderatoren gern!
    @stdin Wunder Dich nich wenn diese Postings irgendwann im besagten Sub - Forum stehen, denn
    dises ganze posting hat nischt mit Ansi C im eigentlichen Sinne zu tun.

    so long 🙄



  • Ach und wegen:

    obwohl ich jedoch das mit der ausgabeumlenkung in eine datei favorisiere, da dies wahrscheinlich nicht allzuviel code nachsichziehen wird 😃

    was wäre die bessere wahl, wenn das programm nicht allzu groß werden soll?

    Code sparts du auch noch, aber auf jeden.... 😃 Und weniger Code bedeutet unter Umständen auch weniger Fehler!

    Wenn du das mit

    system("Kommandoaufrufe");
    

    wirklich machen möchtest!
    Dann noch nen guten Tipp von mir: Die Kommandoaufrufe erstmal so in der Shell testen und bei Wohlgefallen dann im C - Programm einbauen!

    system("nach_dem_kommandotest_bei_dir_in_der_Shell_hier_einbauen");
    

    das hilft Fehler vermeiden.

    gruesse 🙂 😉



  • @sclearscreen:

    vorerst danke für deine antworten.

    Dann noch nen guten Tipp von mir: Die Kommandoaufrufe erstmal so in der Shell testen und bei Wohlgefallen dann im C - Programm einbauen!

    das mache ich schon die ganze zeit über 😃 genauso schreib ich mir erstmal kleine testprogramme, welche ich dann in mein "großes" programm übernehme.

    was mich wundert das dieser Thread noch nicht im Sub - Forum Linux/Unix
    gelandet ist, egal das machen die Moderatoren gern!
    @stdin Wunder Dich nich wenn diese Postings irgendwann im besagten Sub - Forum stehen, denn
    dises ganze posting hat nischt mit Ansi C im eigentlichen Sinne zu tun.

    okay, das nächste mal weiß ich es besser und nutze gleich das "Linux/Unix" forum.

    Es sei denn Du willst was übers OS lernen! Statt direkt nen C - programm zu entwicklen was dies macht. Würde nen Shellskript voll und ganz reichen.
    könnte natürlich auch sein Du stehst nicht so auf Shellskripte? bedenke auch das ein Shellskript auf jedes UNIX - Derivat besser portierbar ist als nen ausführbares
    Programm.

    ich kann einfach kein shellscript nehmen, da ich jenes programm als plugin für die gui neutrino auf meiner dbox (digitalreceiver) nutzen möchte (architektur: powerpc). diesbezüglich muss ich es auch crosscompilen.
    bis jetzt läuft mein plugin schon sehr gut. das sind so kleine sachen die ich einfach besser machen will. 😉

    cu...



  • Auf gutes gelingen, hört sich sehr interessant an!

    P.S.: hab meinen Fernseher abgeschafft kommt eh nur Müll, ne Fernsehkarte tuts be mir och

    Grüsse



  • wenn schon system() dann popen(). Da kannst du die Ausgabe gleich einlesen.



  • ich dank dir mal wieder, DrGreenthumb.
    popen kannte ich noch nicht, bei den ganzen open wird ja einem schwindig 😃

    cu...


Anmelden zum Antworten