Serenity Operating System
at master 49 lines 1.2 kB view raw
1/* 2 * Copyright (c) 2020, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/AtomicRefCounted.h> 10#include <AK/IntrusiveList.h> 11#include <Kernel/Forward.h> 12#include <Kernel/Library/LockWeakable.h> 13#include <Kernel/Locking/SpinlockProtected.h> 14#include <Kernel/UnixTypes.h> 15 16namespace Kernel { 17 18class ProcessGroup 19 : public AtomicRefCounted<ProcessGroup> 20 , public LockWeakable<ProcessGroup> { 21 22 AK_MAKE_NONMOVABLE(ProcessGroup); 23 AK_MAKE_NONCOPYABLE(ProcessGroup); 24 25public: 26 ~ProcessGroup(); 27 28 static ErrorOr<NonnullLockRefPtr<ProcessGroup>> try_create(ProcessGroupID); 29 static ErrorOr<NonnullLockRefPtr<ProcessGroup>> try_find_or_create(ProcessGroupID); 30 static LockRefPtr<ProcessGroup> from_pgid(ProcessGroupID); 31 32 ProcessGroupID const& pgid() const { return m_pgid; } 33 34private: 35 ProcessGroup(ProcessGroupID pgid) 36 : m_pgid(pgid) 37 { 38 } 39 40 IntrusiveListNode<ProcessGroup> m_list_node; 41 ProcessGroupID m_pgid; 42 43public: 44 using List = IntrusiveList<&ProcessGroup::m_list_node>; 45}; 46 47SpinlockProtected<ProcessGroup::List, LockRank::None>& process_groups(); 48 49}