プロセスIDをloginctlセッションIDに

プロセスIDをloginctlセッションIDに

「少し」問題があります:)

コマンドを実行すると

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インスタンスが1つしかありませんか?これは、lightdm(xディスプレイマネージャ)のインスタンスがほとんど表示されず、どのセッションIDが正しいかを判断できないためです。

はい、これをC ++(c ++ 11)として実装するので、C ++の答えも受け入れます。 :)

ありがとうございます。

ありがとう、ゴロバイト

ベストアンサー1

/proc/pid/sessionidでIDを次に渡しましたか?loginctl show-session ID しかし、私の場合は同じ番号が表示されました。

someuser@somemachine-test ~ $ cat /proc/self/sessionid
9293

someuser@somemachine-test ~ $ loginctl list-sessions
   SESSION        UID USER             SEAT
      9293      10002 someuser

1 sessions listed.
someuser@somemachine-test ~ $ loginctl show-session 9293
Id=9293
User=10002
Name=someuser
Timestamp=Tue 2018-09-18 13:24:08 CEST
TimestampMonotonic=3614939245544
VTNr=0
Remote=yes
RemoteHost=172.21.98.41
Service=sshd
Scope=session-9293.scope
Leader=8290
Audit=9293
Type=tty
Class=user
Active=yes
State=active
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
LockedHint=no

cgourpという名前でも見つけることができます。

someuser@somemachine-test ~ $ cat /proc/self/cgroup
11:pids:/
10:memory:/user.slice
9:freezer:/
8:hugetlb:/
7:devices:/
6:cpuacct,cpu:/user.slice
5:blkio:/
4:perf_event:/
3:cpuset:/
2:net_prio,net_cls:/
1:name=systemd:/user.slice/user-10002.slice/session-9293.scope

C++の場合systemd-logindのDBusインタフェースCライブラリもありますsd_ログイン。しかし残念ながら、私はこれについての経験がありません。

おすすめ記事