wvprociter.cc

00001 /*
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * Process iterator.  Iterates through all the processes.
00006  *
00007  */
00008 
00009 #include "wvprociter.h"
00010 #include "wvfile.h"
00011 #include <sys/types.h>
00012 #include <signal.h>
00013 
00014 WvProcIter::WvProcIter() :
00015     dir_iter("/proc", false, true)
00016 {
00017 }
00018 
00019 WvProcIter::~WvProcIter()
00020 {
00021 }
00022 
00023 bool WvProcIter::isok() const
00024 {
00025     return dir_iter.isok();
00026 }
00027 
00028 void WvProcIter::rewind()
00029 {
00030     dir_iter.rewind();
00031 }
00032 
00033 bool WvProcIter::next()
00034 {
00035     for (;;)
00036     {
00037         if (!dir_iter.next())
00038             return false;
00039         if (!wvstring_to_num(dir_iter->name, proc_ent.pid))
00040             continue;
00041 
00042         proc_ent.exe = wvreadlink(WvString("%s/exe", dir_iter->fullname));
00043 
00044         proc_ent.cmdline.zap();
00045         WvFile cmdline_file(WvString("%s/cmdline", dir_iter->fullname), O_RDONLY);
00046         while (cmdline_file.isok())
00047         {
00048             const char *line = cmdline_file.getline(0, '\0');
00049             if (line == NULL)
00050                 break;
00051             WvString line_str(line);
00052             line_str.unique();
00053             proc_ent.cmdline.append(line_str);
00054         }
00055         cmdline_file.close();
00056 
00057         break;
00058     }
00059     return true;
00060 }
00061 
00062 bool wvkillall(WvStringParm name, int sig)
00063 {
00064     bool found = false;
00065     WvProcIter i;
00066     for (i.rewind(); i.next(); )
00067     {
00068         if (!i->cmdline.isempty()
00069                 && !!*i->cmdline.first()
00070                 && getfilename(*i->cmdline.first()) == name
00071                 && i->pid > 0)
00072         {
00073             ::kill(i->pid, sig);
00074             found = true;
00075         }
00076     }
00077     return found;
00078 }

Generated on Mon Feb 5 10:54:29 2007 for WvStreams by  doxygen 1.5.1