쉘스크립트에서 특정 pid만 킬하게 짜려고 하는데요
글쓴이: kokihong87 / 작성시간: 화, 2013/11/26 - 6:01오후
서버는 HP-UX고 데몬은 포크방식입니다.
개발서버에서 데몬을 테스트 하면 자식프로세서들이 잘 죽는데 운영에서 하면 이상하게 안죽고 쌓이는 경우가 많아서
그냥 쉘스크립트로 떠있는 프로세서중에서 슬립상태인 경우 실행시간이 30분 경과되면 킬 시켜버리려구 하는데요
일단 슬립상태인 pid를 얻긴 했는데...
set PPID = `ps -ef | grep 데몬 | grep -v "grep" | awk '{if( $3 == 1 ) print $2;}'`
set C_PID = `ps -ef | grep 데몬 | grep -v "grep" | awk '{if( $3 == "'"${PPID}"'") print $2;}'`
set C_PID_NUM = `ps -ef | grep 데몬 | grep -v "grep" | awk '{if( $3 == "'"${PPID}"'") print $2;}' | wc -l`
문제는 C_PID에 14861 21154 22114 24019 29943 21193 9327 1642 22023 11351 4353 26703 12331
이런식으로 들어가더라구요... 보통 슬립상태인 프로세서가 130개정도 되는데 배열에 잘라서 넣자니 그게 더 일일거 같구
검색해보니까 pid를 파일로 저장해서 하신다는 분도 있던데요.. 보통 이런경우 어떻게 특정 pid값과 그 pid의 정보같은거
추출하시나요?
Forums:
우선 질문글의 명령은 아래와 같이 간단히 쓰실 수도
우선 질문글의 명령은 아래와 같이 간단히 쓰실 수도 있습니다.
프로세스 시작된지 30분 이상 경과되었으면서 현재 슬립상태인 것들에게만 TERM 시그널을 보내려면 아래와 같이 할 수 있을 것입니다. 종료조건은 대충 설정한 것이니까, 상황에 맞게 ps 명령의 -o 옵션이나 awk 명령의 비교문을 바꿔 적용하시면 될 것이고요.
그런데, 이런 강제종료보다는 운영서버에서 자식프로세스들이 죽지 않고 쌓이는 원인을 찾아 고치는 것이 옳은 방법 같습니다.
제가 쓰는 PC를 보니 프로세스 대부분이 S(Interruptible sleep: waiting for an event to complete) 상태이고 일부 프로세스만 R(Running or runnable) 상태를 잠시 유지했다가 다시 S로 빠지는 정도입니다. 바쁘게 돌아가는 서버에서는 좀 다를지 모르겠지만 이런 피상적인 상태정보를 이용해서 강제종료 대상을 고르는 것은 좋은 발상이 아닌 것 같습니다.
댓글 달기