blob: 919b39b43472317075d76c82f08e31d8f510b41e [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SECANOMALYD_PROCESSES_H_
#define SECANOMALYD_PROCESSES_H_
#include <sys/types.h>
#include <memory>
#include <string>
#include <vector>
#include <base/optional.h>
#include <base/strings/string_piece.h>
#include <brillo/process/process.h>
namespace secanomalyd {
class ProcEntry {
public:
ProcEntry() : pid_{}, pidns_{}, comm_{}, args_{} {}
explicit ProcEntry(base::StringPiece proc_str);
// Copying the private fields is fine.
ProcEntry(const ProcEntry& other) = default;
ProcEntry& operator=(const ProcEntry& other) = default;
// TODO(jorgelo): Implement move constructor so that we can use emplace().
pid_t pid() const { return pid_; }
const ino_t pidns() const { return pidns_; }
const std::string& comm() const { return comm_; }
const std::string& args() const { return args_; }
private:
pid_t pid_;
ino_t pidns_;
std::string comm_;
std::string args_;
};
using ProcEntries = std::vector<ProcEntry>;
using MaybeProcEntries = base::Optional<ProcEntries>;
enum class ProcessFilter { kAll = 0, kInitPidNamespaceOnly };
MaybeProcEntries ReadProcesses(ProcessFilter filter);
// Used mostly for testing.
// |reader| is un-owned.
MaybeProcEntries ReadProcesses(brillo::Process* reader, ProcessFilter filter);
MaybeProcEntries ReadProcessesFromString(const std::string& procs,
ProcessFilter filter);
} // namespace secanomalyd
#endif // SECANOMALYD_PROCESSES_H_