모든 활성 프로세스를 찾는 쉘 스크립트를 만들고 사용자에게 예약 정책을 인쇄하고 싶습니다. 결과는 다음과 같습니다.
pid 3042's current scheduling policy: SCHED_OTHER
pid 3042's current scheduling priority: 0
pid 3043's current scheduling policy: SCHED_OTHER
pid 3043's current scheduling priority: 0
pid 3044's current scheduling policy: SCHED_OTHER
pid 3044's current scheduling priority: 0
ps
나는 이 작업을 수행했지만 및 명령을 사용하는 단일 프로세스에 대해서만 수행했습니다 chrt
.
답변1
ps -c
괜찮습니다. 그러나 대부분의 실제 애플리케이션은 스레드 하위 집합의 예약 정책만 변경합니다. 따라서 부분적으로 실시간으로 실행될 수도 있지만 TS
. 전체 보기를 보려면 다음을 추가하여 개별 스레드를 살펴보세요 -T
.
eric ) ps -cT -p (pidof pulseaudio)
PID SPID CLS PRI TTY TIME CMD
88821 88821 TS 30 ? 00:00:25 pulseaudio
88821 88822 RR 45 ? 00:00:22 alsa-sink-ALC25
88821 88823 RR 45 ? 00:00:00 alsa-source-ALC
eric ) ps -cT -p (pidof jackdbus)
PID SPID CLS PRI TTY TIME CMD
86902 86902 TS 19 ? 00:00:00 jackdbus
86902 109091 TS 19 ? 00:00:00 jackdbus
86902 109092 FF 50 ? 00:00:00 jackdbus
86902 109093 TS 19 ? 00:00:00 jackdbus
여기에서 jack이 FIFO로 실행되고 pulseaudio가 라운드 로빈으로 실행되는 것을 볼 수 있습니다. 지정되지 않은 TS
경우 두 프로세스 모두 읽기만 합니다 .-T
명령이 작동하지 않는 경우,더 나은 쉘로 전환그리고 다시 시도해 보세요.
답변2
나는 예약 클래스의 약식 이름을 표시한다는 점에서 약간의 차이만 있고 매우 유사한 출력을 제공하는 다음 명령 ps
을 생각해냈습니다 . awk
다음 매핑이 도움이 될 수 있습니다.
- TS~이다SCHED_OTHER
- ₩₩~이다SCHED_RR
- FF~이다SCHED_FIFO
명령:
ps -e -o s,pid,cls,pri | grep ^R | awk -v sq="'" '{print "pid",$2,sq,"s current scheduling policy:",$3,"\npid",$2,sq,"s current priority:",$4}'
내 호스트에서 위 명령을 실행하면 다음과 같은 출력이 제공됩니다.
pid 8456 ' s current scheduling policy: TS
pid 8456 ' s current priority: 19
pid 12552 ' s current scheduling policy: TS
pid 12552 ' s current priority: 19
편집하다
주석을 기반으로 다음 명령은 chrt
활성 프로세스가 실행 중이거나 실행 가능한 프로세스라고 가정하고 정확한 출력을 제공합니다 R
.
ps -e -o s,pid | grep ^R | awk '{system("chrt -p " $2)}'
모든 프로세스(실행 중, 절전 중, 중지 및 좀비)에 대한 출력을 얻으려면 다음 명령을 사용하고 싶습니다.
ls /proc | grep -e ^[0-9] | awk '{system("chrt -p " $0)}'|more
답변3
나는 이를 수행하는 두 가지 방법을 찾았습니다. 이는 최적이 아닐 수도 있지만 작업을 완료합니다.
-
#! /bin/bash ps -u | grep '[0-9]' | awk '{print $2}' | while read line do chrt -p "$line" 2>/dev/null done
-
ps -u | grep '[0-9]' | awk '{system("chrt -p" $2)}' 2>/dev/null
답변4
이전 답변을 기반으로 한 더 나은 버전:
(cd /proc; ls -d [0-9]* | xargs -n 1 chrt -p)
awk
( 분명히 작업인 경우에는 사용할 필요가 없으며 쉘 글로브를 사용하는 경우에도 xargs
사용할 필요가 없습니다 )grep
또한 모든 실시간 스레드를 보려면(SCHED_OTHER 및 SCHED_IDLE 제외)
ps -cTeFl | grep -Evw 'TS|IDL'
(제대로 구문 분석했지만~일 것이다awk가 필요함)