Prozess Name über pid



  • Hallo.
    Weiß jemand vielleicht wie man unter Linux über den pid des Prozesses den entsprechenden Namen dieses Prozesses, bzw der executable rausfinden kann?

    Unter Windoof kann manja sowas schreiben:

    std::string CPortProber::GetExecutableName() {
    #ifdef WIN32
        DWORD  dwPID = GetCurrentProcessId();
        char szProcessName[MAX_PATH] = TEXT("<unknown>");
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPID );
        if(hProcess != NULL) {
            HMODULE hMod;
            DWORD cbNeeded;
    
            if(EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
                GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(char) );
        }
        CloseHandle(hProcess);
        return szProcessName;
    #else
         // hier möchte ich die Funktion für Linux vervollständigen
        return "";
    #endif
    }
    

    Grüße
    Dimitrij



  • - Einmal findet man diese Info in argv[0]
    - Anders auch in /proc/<pid>/cmdline

    #include <sys/types.h>
    #include <unistd.h>
    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    string get_exec_name(void)
    {
        stringstream cmdfilename;
        cmdfilename << "/proc/" << getpid() << "/cmdline";
    
        ifstream cmdfile( cmdfile.str().c_str() );
    
        // hier weiss ich nicht wie istream sich verhält, denn in der Datei stehen die einzelnen Wörter der Kommandozeile durch Nullbytes getrennt
        string cmdline;
        cmdfile >> cmdline;
        return cmdline;
    }
    


  • Super
    Danke dir.

    Einmal findet man diese Info in argv[0]

    Ich habe keine Möglichkeit auf die argv zuzugreifen. Daher muss es auf eine andere art geschehen.
    Das was du gepostet hast funzt einwandfrei.

    Danke

    p.s.
    Du hast dich kurz vertippt:

    ifstream cmdfile( cmdfilename.str().c_str() );
    

Anmelden zum Antworten