我有一个“小”问题:)
如果我运行命令
loginctl list-session
我将获得包含会话、uid、用户和座位列的输出。所以我在这里有 c6、c2、c4 等会话。
另外,我有一个带有一些 id 的进程,我想知道它在哪个会话中运行?
例如
cat /proc/<pid>/sessionid
将返回一些像 4294967295 这样的数字,这与 loginctl 会话完全不同。
现在我的主要问题是:如何从进程 ID 获取 loginctl 会话 ID。
是的,我知道我可以运行它
ps aux | grep -i <pid> | awk '{print $1}'
并获取用户,然后将此用户映射到 loginctl 并获取会话 ID ...但我认为这不是正确的解决方案。例如,在 loginctl 中是否只有一个 UserA 实例?因为我可以看到 lightdm(x 显示管理器)的实例很少,我不能确定哪个会话 id 是正确的。
是的,我将在 C++ (c++11) 中实现它,所以我也会接受 C++ 的答案:)
谢谢你。
问候,golobitch
您是否尝试将您的 ID 从 /proc/pid/sessionid 传递到
loginctl show-session ID
但在我的情况下,它显示了 sam 号码。我也可以通过 cgourp 的名称找到它:
对于 c++ ,systemd-logind和 C 库sd_login中有 DBus 接口。但不幸的是,我对此没有任何经验。