Utilities/logout: Refactor to use Core::SessionManagement::logout

This commit is contained in:
Peter Elliott 2022-09-05 22:16:25 -06:00 committed by Andreas Kling
parent 2c3caa7e17
commit 1df4cc1926
Notes: sideshowbarker 2024-07-17 06:24:24 +09:00

View file

@ -4,20 +4,11 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibCore/ProcessStatisticsReader.h>
#include <LibCore/SessionManagement.h>
#include <LibCore/System.h>
#include <LibMain/Main.h>
#include <signal.h>
static Core::ProcessStatistics const& get_proc(Core::AllProcessesStatistics const& stats, pid_t pid)
{
for (auto& proc : stats.processes) {
if (proc.pid == pid)
return proc;
}
VERIFY_NOT_REACHED();
}
ErrorOr<int> serenity_main(Main::Arguments)
{
TRY(Core::System::pledge("stdio proc rpath"));
@ -25,25 +16,7 @@ ErrorOr<int> serenity_main(Main::Arguments)
TRY(Core::System::unveil("/etc/passwd", "r"));
TRY(Core::System::unveil(nullptr, nullptr));
// logout finds the highest session up all nested sessions, and kills it.
auto stats = Core::ProcessStatisticsReader::get_all();
if (!stats.has_value()) {
warnln("couldn't get process statistics");
return 1;
}
pid_t sid = getsid(0);
while (true) {
pid_t parent = get_proc(stats.value(), sid).ppid;
pid_t parent_sid = get_proc(stats.value(), parent).sid;
if (parent_sid == 0)
break;
sid = parent_sid;
}
TRY(Core::System::kill(-sid, SIGTERM));
TRY(Core::SessionManagement::logout());
return 0;
}