-rw-r--r-- | NEWS.xml | 1 | ||||
-rw-r--r-- | src/process.cc | 14 |
2 files changed, 13 insertions, 2 deletions
@@ -1,16 +1,17 @@ <?xml version="1.0" encoding="us-ascii"?> <news> <version version="0.2.1"> <ni>do not act -e when doing -r</ni> + <ni>proper handling of <kbd>ProcessName</kbd> on <kbd>FreeBSD</kbd></ni> </version> <version version="0.2" date="July 24th, 2004"> <ni>now dudki sends arbitrary signals to the processes being monitored from the command line</ni> <ni>detection of running processes which do not keep pidfiles, using process name</ni> </version> <version version="0.1" date="July 21st, 2004"> <ni><kbd>initgroups()</kbd> called before executing <kbd>RestartCommand</kbd></ni> <ni>more civilized way of restarting on <kbd>SIGHUP</kbd></ni> <ni>minor changes to build process</ni> </version> <version version="0.0" date="July 11th, 2004"> <ni>Initial release</ni> diff --git a/src/process.cc b/src/process.cc index 8a5b5d2..96c874f 100644 --- a/src/process.cc +++ b/src/process.cc @@ -240,35 +240,45 @@ void process::gather_proc_info() { continue; allpids.push_back(pid); } closedir(pd); char s[256]; procpids.clear(); for(vector<pid_t>::const_iterator i=allpids.begin();i!=allpids.end();++i) { int r = snprintf(s,sizeof(s),"/proc/%d/stat",*i); if(r>=sizeof(s) || r<1) continue; string cmd; ifstream ss(s,ios::in); - if(!ss) - continue; + if(ss) { getline(ss,cmd); string::size_type op = cmd.find('('); if(op==string::npos) continue; cmd.erase(0,op+1); string::size_type cp = cmd.find(')'); if(cp==string::npos) continue; cmd.erase(cp); + }else{ + r = snprintf(s,sizeof(s),"/proc/%d/status",*i); + if(r>=sizeof(s) || r<1) + continue; + ifstream ss(s,ios::in); + if(!ss) + continue; + ss >> cmd; + if(cmd.empty()) + continue; + } r = snprintf(s,sizeof(s),"/proc/%d/cmdline",*i); if(r>=sizeof(s) || r<1) continue; ifstream cs(s,ios::binary); if(!cs) continue; string command; while(cs) { string cl; getline(cs,cl,(char)0); string::size_type lsl = cl.rfind('/'); if(lsl!=string::npos) |