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() );