123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #ifndef BASE_PROCESS_PROCESS_ITERATOR_H_
- #define BASE_PROCESS_PROCESS_ITERATOR_H_
- #include <stddef.h>
- #include <list>
- #include <string>
- #include <vector>
- #include "base/base_export.h"
- #include "base/files/file_path.h"
- #include "base/macros.h"
- #include "base/process/process.h"
- #include "base/strings/string16.h"
- #include "base/strings/string_util.h"
- #include "build/build_config.h"
- #if defined(OS_WIN)
- #include <windows.h>
- #include <tlhelp32.h>
- #elif defined(OS_APPLE) || defined(OS_OPENBSD)
- #include <sys/sysctl.h>
- #elif defined(OS_FREEBSD)
- #include <sys/user.h>
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- #include <dirent.h>
- #endif
- namespace base {
- #if defined(OS_WIN)
- struct ProcessEntry : public PROCESSENTRY32 {
- ProcessId pid() const { return th32ProcessID; }
- ProcessId parent_pid() const { return th32ParentProcessID; }
- const wchar_t* exe_file() const { return szExeFile; }
- };
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- struct BASE_EXPORT ProcessEntry {
- ProcessEntry();
- ProcessEntry(const ProcessEntry& other);
- ~ProcessEntry();
- ProcessId pid() const { return pid_; }
- ProcessId parent_pid() const { return ppid_; }
- ProcessId gid() const { return gid_; }
- const char* exe_file() const { return exe_file_.c_str(); }
- const std::vector<std::string>& cmd_line_args() const {
- return cmd_line_args_;
- }
- ProcessId pid_;
- ProcessId ppid_;
- ProcessId gid_;
- std::string exe_file_;
- std::vector<std::string> cmd_line_args_;
- };
- #endif
- class ProcessFilter {
- public:
-
-
- virtual bool Includes(const ProcessEntry& entry) const = 0;
- protected:
- virtual ~ProcessFilter() = default;
- };
- class BASE_EXPORT ProcessIterator {
- public:
- typedef std::list<ProcessEntry> ProcessEntries;
- explicit ProcessIterator(const ProcessFilter* filter);
- virtual ~ProcessIterator();
-
-
-
-
-
- const ProcessEntry* NextProcessEntry();
-
- ProcessEntries Snapshot();
- protected:
- virtual bool IncludeEntry();
- const ProcessEntry& entry() { return entry_; }
- private:
-
-
-
- bool CheckForNextProcess();
-
-
- void InitProcessEntry(ProcessEntry* entry);
- #if defined(OS_WIN)
- HANDLE snapshot_;
- bool started_iteration_;
- #elif defined(OS_APPLE) || defined(OS_BSD)
- std::vector<kinfo_proc> kinfo_procs_;
- size_t index_of_kinfo_proc_;
- #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
- DIR* procfs_dir_;
- #endif
- ProcessEntry entry_;
- const ProcessFilter* filter_;
- DISALLOW_COPY_AND_ASSIGN(ProcessIterator);
- };
- class BASE_EXPORT NamedProcessIterator : public ProcessIterator {
- public:
- NamedProcessIterator(const FilePath::StringType& executable_name,
- const ProcessFilter* filter);
- ~NamedProcessIterator() override;
- protected:
- bool IncludeEntry() override;
- private:
- FilePath::StringType executable_name_;
- DISALLOW_COPY_AND_ASSIGN(NamedProcessIterator);
- };
- BASE_EXPORT int GetProcessCount(const FilePath::StringType& executable_name,
- const ProcessFilter* filter);
- }
- #endif
|