rtkit
예를 들어 syslog에 스팸을 보내기 때문에 "감독"하는 스레드를 알고 있는 것 같습니다.
rtkit-daemon[1277]: Supervising 3 threads of 2 processes of 1 users.
그러나 이 사악하고 작은 것은 "감독되는" 프로세스/스레드를 나열하는 방법을 제공하지 않는 것 같습니다. rtkitctl
데몬과 스레드를 "재설정"하거나 (무엇을 의미하든) 종료하거나 다시 시작하는 옵션이 있습니다. 적어도 데비안에서는 다른 유틸리티가 보이지 않습니다. 아마도 숨겨진 인터페이스가 있거나 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"