rtkit
显然知道它正在“监督”哪些线程,因为它会向系统日志发送垃圾邮件,例如
rtkit-daemon[1277]: Supervising 3 threads of 2 processes of 1 users.
然而,这个邪恶的小东西似乎没有提供列出那些“受监督”进程/线程的方法。rtkitctl
可以选择终止或重新启动守护进程以及“重置”线程(无论这意味着什么)。至少在 Debian 上,我没有看到任何其他实用程序。也许有隐藏的DBus
接口,或者发行版没有打包一些实用程序。
那么,有没有ps
办法列出那些“受监督”的线程,或者这只是整个dbus
/systemd
生态系统的另一个不透明的方面?
答案1
RTKit 提供了一个 DBus 接口来检索此信息。这是一个 shell 脚本,演示了:
#!/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"