ProcessGroup.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) 2020, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/IntrusiveList.h>
  8. #include <AK/RefCounted.h>
  9. #include <AK/Weakable.h>
  10. #include <Kernel/Locking/SpinlockProtected.h>
  11. #include <Kernel/UnixTypes.h>
  12. namespace Kernel {
  13. class ProcessGroup
  14. : public RefCounted<ProcessGroup>
  15. , public Weakable<ProcessGroup> {
  16. AK_MAKE_NONMOVABLE(ProcessGroup);
  17. AK_MAKE_NONCOPYABLE(ProcessGroup);
  18. public:
  19. ~ProcessGroup();
  20. static RefPtr<ProcessGroup> try_create(ProcessGroupID);
  21. static RefPtr<ProcessGroup> try_find_or_create(ProcessGroupID);
  22. static RefPtr<ProcessGroup> from_pgid(ProcessGroupID);
  23. const ProcessGroupID& pgid() const { return m_pgid; }
  24. private:
  25. ProcessGroup(ProcessGroupID pgid)
  26. : m_pgid(pgid)
  27. {
  28. }
  29. IntrusiveListNode<ProcessGroup> m_list_node;
  30. ProcessGroupID m_pgid;
  31. public:
  32. using List = IntrusiveList<ProcessGroup, RawPtr<ProcessGroup>, &ProcessGroup::m_list_node>;
  33. };
  34. SpinlockProtected<ProcessGroup::List>& process_groups();
  35. }