Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/process_util.h"
      6 
      7 namespace base {
      8 
      9 #if defined(OS_POSIX)
     10 ProcessEntry::ProcessEntry() {}
     11 ProcessEntry::~ProcessEntry() {}
     12 #endif
     13 
     14 int GetProcessCount(const FilePath::StringType& executable_name,
     15                     const ProcessFilter* filter) {
     16   int count = 0;
     17   NamedProcessIterator iter(executable_name, filter);
     18   while (iter.NextProcessEntry())
     19     ++count;
     20   return count;
     21 }
     22 
     23 bool KillProcesses(const FilePath::StringType& executable_name, int exit_code,
     24                    const ProcessFilter* filter) {
     25   bool result = true;
     26   NamedProcessIterator iter(executable_name, filter);
     27   while (const ProcessEntry* entry = iter.NextProcessEntry()) {
     28 #if defined(OS_WIN)
     29     result &= KillProcessById(entry->pid(), exit_code, true);
     30 #else
     31     result &= KillProcess(entry->pid(), exit_code, true);
     32 #endif
     33   }
     34   return result;
     35 }
     36 
     37 const ProcessEntry* ProcessIterator::NextProcessEntry() {
     38   bool result = false;
     39   do {
     40     result = CheckForNextProcess();
     41   } while (result && !IncludeEntry());
     42   if (result)
     43     return &entry_;
     44   return NULL;
     45 }
     46 
     47 ProcessIterator::ProcessEntries ProcessIterator::Snapshot() {
     48   ProcessEntries found;
     49   while (const ProcessEntry* process_entry = NextProcessEntry()) {
     50     found.push_back(*process_entry);
     51   }
     52   return found;
     53 }
     54 
     55 bool ProcessIterator::IncludeEntry() {
     56   return !filter_ || filter_->Includes(entry_);
     57 }
     58 
     59 NamedProcessIterator::NamedProcessIterator(
     60     const FilePath::StringType& executable_name,
     61     const ProcessFilter* filter) : ProcessIterator(filter),
     62                                    executable_name_(executable_name) {
     63 }
     64 
     65 NamedProcessIterator::~NamedProcessIterator() {
     66 }
     67 
     68 }  // namespace base
     69