스크립트에 까막눈이라 전혀 감이 안오네요.
아래 명령어에서 각각의 쓰레드에 별도의 명령어를 주는 스크립트는 어떻게 해야 하나요?
아래에서는 956/958/959/960/961에 각각 다른 명령어를 실행하려고 합니다.
[code:317vd5d4]$ chrt -ap pgrep mpd
pid 956’s current scheduling policy: SCHED_OTHER
pid 956’s current scheduling priority: 0
pid 958’s current scheduling policy: SCHED_OTHER
pid 958’s current scheduling priority: 0
pid 959’s current scheduling policy: SCHED_OTHER
pid 959’s current scheduling priority: 0
pid 960’s current scheduling policy: SCHED_OTHER
pid 960’s current scheduling priority: 0
pid 961’s current scheduling policy: SCHED_OTHER
pid 961’s current scheduling priority: 0[/code:317vd5d4]
흠… 각각의 쓰레드를 추출하는 보다 쉽고 간단한 방법은 없을까요?
아래는 주먹구구로 만들어 본건데, 별로 마음에 안드네요.
[code:1lqp12tg]
echo chrt -ap $(pgrep mpd) | awk 'NR %2 == 0 {printf "%i\n",$2}' | awk 'NR==1{print}'
echo chrt -ap $(pgrep mpd) | awk 'NR %2 == 0 {printf "%i\n",$2}' | awk 'NR==2{print}'
...
[/code:1lqp12tg]
bahzu
2월 2, 2014, 2:40오후
3
맨페이지를 확인해 보시면 금방 일 것 같은 데요?
-p 옵션을 활용해 보십시오. (-ap는 잘못된 활용인 것 같습니다.)
[code:2wfacyny]Set policy:
chrt [options] [<policy>] <priority> [-p <pid> | <command> [<arg>...]]
Get policy:
chrt [options] -p <pid>
Scheduling policies:
-b | --batch set policy to SCHED_BATCH
-f | --fifo set policy to SCHED_FIFO
-i | --idle set policy to SCHED_IDLE
-o | --other set policy to SCHED_OTHER
-r | --rr set policy to SCHED_RR (default)
Scheduling flags:
-R | --reset-on-fork set SCHED_RESET_ON_FORK for FIFO or RR
Options:
-a | --all-tasks operate on all the tasks (threads) for a given pid
-h | --help display this help
-m | --max show min and max valid priorities
-p | --pid operate on existing given pid
-v | --verbose display status information
-V | --version output version information[/code:2wfacyny]
올려주신 도움말에도 -a 옵션이 아래처럼 나와 있구요, 제가 사용 중입니다.
chrt -p pgrep mpd
하면 메인 쓰레드 1개만 나오고, 업데이트/디코더/플레이어/출력 쓰레드가 안 나옵니다.
[code:3p5cl7h8]
-a | --all-tasks operate on all the tasks (threads) for a given pid
[/code:3p5cl7h8]
질문은 어떻게 하면 간단하게 쓰레드 5개를 다 추출하느냐 하는 것인데요.
bahzu
2월 2, 2014, 3:32오후
5
위의 질문은 전체를 말씀 하신 것이 아니였던 것 같은데
저의 착각인가 봅니다.
[quote="parkmino":2h1eln77]업데이트/디코더/플레이어/출력 쓰레드가 안 나옵니다.[/quote:2h1eln77]
이 부분은 무슨 말씀인지 모르겠으나 awk와 연관된 것으로 추측합니다.
전체 쓰레드를 보시려면 -a 옵션만 활용하시면 됩니다.
아니면 스케쥴 알고리듬 별로 출력하시고자 하는 의도인지 명확하지 않습니다.
만약 SCHED_OTHER 항목의 5개를 말씀하신 것이라면 위에서 이미 답을 드렸습니다.
아래 링크는 chrt 명령어에 대한 활용 예제입니다.
[url:2h1eln77]http://www.cyberciti.biz/faq/howto-set-real-time-scheduling-priority-process/[/url:2h1eln77]
질문하신 의도가 뭔지 정확히 잘 모르겠어서, 대충 생각난 대로 적어봅니다.
홀수줄만 출력
chrt -ap $(pgrep mpd)|sed -n ‘1~2p’
모든 프로세스 번호 출력
chrt -ap $(pgrep mpd)|awk -F "('| )" ‘{print $2}’|sort|uniq
모든 프로세스 종료
chrt -ap $(pgrep mpd)|awk -F "('| )" ‘{print $2}’|sort|uniq|xargs kill -9
네, 두번째 내용입니다.
쓰레드 pid를 추출해서 각각 다른 명령어로 전달하려구요.
제꺼와 합쳐서 아래처럼 만들어 봤습니다.
chrt -ap $(pgrep mpd) | awk -F "('| )" ‘NR%2==0 {print $2}’