rtkit
たとえば、syslogにスパムを送信するため、「監督」するスレッドを知っているようです。
rtkit-daemon[1277]: Supervising 3 threads of 2 processes of 1 users.
しかし、この邪悪で小さなことは、「監督される」プロセス/スレッドをリストする方法を提供していないようです。rtkitctl
デーモンとスレッドを「リセット」するか(何を意味するか)、終了または再開するオプションがあります。少なくともDebianでは他のユーティリティは見えません。おそらく隠されたインターフェイスがあるか、DBus
ディストリビューションに含まれていないいくつかのユーティリティがあるかもしれません。
それでは、これらの「監督される」スレッドをリストする方法はありますかps
?それとも、これは全体dbus
/systemd
生態系のもう一つの不透明な側面でしょうか?
答え1
RTKitは、この情報を取得するためのDBusインターフェースを提供します。以下は、以下を示すシェルスクリプトです。
#!/bin/bash
# Get the list of processes managed by rtkit
processes=$(dbus-send --system --dest=org.freedesktop.RealtimeKit1 --print-reply /org/freedesktop/RealtimeKit1 org.freedesktop.RealtimeKit1.GetManagedProcesses | awk '/array/ {flag=1; next} flag')
# Loop through each process and extract the process ID and thread count
while read -r line; do
if [[ $line =~ uint32\ ([0-9]+) ]]; then
pid="${BASH_REMATCH[1]}"
elif [[ $line =~ uint32\ ([0-9]+) ]]; then
threads="${BASH_REMATCH[1]}"
echo "Process ID: $pid, Supervised Threads: $threads"
fi
done <<< "$processes"