diff --git a/main.cpp b/main.cpp index f6cd086..67f82c6 100644 --- a/main.cpp +++ b/main.cpp @@ -116,7 +116,17 @@ bool createPidFile(const std::string& fileName) if(std::filesystem::exists(fileName)) { std::cerr< 1) return false; + else + { + std::cerr<<"Only one " + < applicationNames = getApplicationlist(confDir+"blacklist"); @@ -185,6 +195,7 @@ int main(int argc, char* argv[]) signal(SIGINT, sigTerm); signal(SIGTERM, sigTerm); + signal(SIGHUP, sigTerm); signal(SIGUSR1, sigUser1); while(!stop) diff --git a/process.cpp b/process.cpp index e721931..1dbc56c 100644 --- a/process.cpp +++ b/process.cpp @@ -127,6 +127,18 @@ std::string Process::getName() return name_; } +std::vector Process::byName(const std::string& name) +{ + std::vector procs = getAllProcessPids(); + std::vector retProcs; + for(const auto & pid : procs ) + { + Process proc(pid); + if(name == proc.getName()) retProcs.push_back(proc); + } + return retProcs; +} + pid_t Process::convertPid(const std::string& pid) { pid_t ret; diff --git a/process.h b/process.h index 54d7fe2..88d69db 100644 --- a/process.h +++ b/process.h @@ -32,7 +32,7 @@ private: private: std::vector openStatus(); - std::vector getAllProcessPids(); + static std::vector getAllProcessPids(); static pid_t convertPid(const std::string& pid); public: @@ -47,6 +47,7 @@ public: pid_t getPPid(); Process getParent(){return Process(getPPid());} std::vector getChildren(); + static std::vector byName(const std::string& name); Process(){} Process(pid_t pidIn); }; diff --git a/xinstance.cpp b/xinstance.cpp index 5f2e509..c9701e0 100644 --- a/xinstance.cpp +++ b/xinstance.cpp @@ -132,9 +132,9 @@ pid_t XInstance::getPid(Window wid) char errorString[1024]; XGetErrorText(display, ret, errorString, 1024); debug("XGetWMClientMachine failed! " + std::string(errorString)); - return -1; + if(!ignoreClientMachine) return -1; } - char** xWidHostNameStringList; + char** xWidHostNameStringList = nullptr; int nStrings; ret = XTextPropertyToStringList(&xWidHostNameTextProperty, &xWidHostNameStringList, &nStrings); if (!ret || nStrings == 0) @@ -142,16 +142,16 @@ pid_t XInstance::getPid(Window wid) char errorString[1024]; XGetErrorText(display, ret, errorString, 1024); debug("XTextPropertyToStringList failed! " + std::string(errorString)); - return -1; + if(!ignoreClientMachine) return -1; } char hostName[HOST_NAME_MAX+1]={0}; if(gethostname(hostName, HOST_NAME_MAX) != 0) { debug("Can't get host name"); - return -1; + if(!ignoreClientMachine) return -1; } pid_t pid = -1; - if(strcmp(hostName, xWidHostNameStringList[0]) == 0 || ignoreClientMachine) + if(ignoreClientMachine || strcmp(hostName, xWidHostNameStringList[0]) == 0 ) { unsigned char* data = nullptr; int format; @@ -164,7 +164,7 @@ pid_t XInstance::getPid(Window wid) { debug("Window "+std::to_string(wid)+" is a remote window"); } - XFreeStringList(xWidHostNameStringList); + if(xWidHostNameStringList) XFreeStringList(xWidHostNameStringList); return pid; }