2012-09-06 2 views
1

프로세스 모니터링을위한 몇 가지 기능을 테스트 중이며 결정된 "지연"으로 긴 코어 덤프를 에뮬레이션해야합니다 (예를 들어 30 초 동안 "코어 덤프"프로세스를 만들어야 함). 코어를 덤프하는 프로세스가 중단되지 않는 슬립 상태에 있기 때문에 SIGKILL로 죽일 수는 없지만 코어 덤프를받는 파이프 명령을 사용하여이 동작을 에뮬레이션하려고 할 때 쉽게 이러한 프로세스를 종료 할 수 있습니다. 그래서 프로세스가 무정형 절전 모드로 들어가고 (ps 같은 상태로) SIGKILL을 무시하도록 할 수 있습니까?"uninterruptible sleep"프로세스를 어떻게 넣을 수 있습니까?

답변

1

프로세스를 인터럽트 가능 슬립 모드로 설정하려면 커널 코드를 사용해야합니다. wake_up_interruptible의 기능과 스핀 잠금을 사용하면이 상태를 얻을 수 있습니다.

-3

SIGKILL을 차단할 방법이 없습니다. 그것이 목적입니다. 프로세스를 제거하는 데 큰 해머 접근법. SIGKILL이 차단할 수있는 유일한 방법은 프로세스가 커널에 잠겨있는 경우입니다.

+0

그러나 덤핑 프로세스 중에 SIGKILL은 코어 프로세스에 영향을받지 않습니다. –

+0

따라서 ... 커널에서 차단되었습니다. –

+0

STAT == D로 차단 한 경우 적어도 시스템 (centos6.4)에서는이를 죽일 수 없으므로 기본 문제를 해결해야합니다. – nhed

0

신뢰할 수있는 (복잡한 경우) 방법은 NFS 디렉토리를 하드 마운트 한 다음 NFS 서버를 중지하는 것입니다.

3

가장 적절한 방법은 냉동실 cgroup을 사용하는 것입니다. FROZEN cgroup 상태 인 경우 프로세스를 중단되지 않는 절전 모드로 전환합니다.

# mkdir /sys/fs/cgroup/freezer 
# mount -t cgroup -ofreezer freezer /sys/fs/cgroup/freezer 
# mkdir /sys/fs/cgroup/freezer/frozen 
# echo FROZEN > /sys/fs/cgroup/freezer/frozen/freezer.state 
# echo `pidof you_process` > /sys/fs/cgroup/freezer/frozen/tasks 

다시 잠자기 모드로 전환하려면 cgroup 상태를 THAWED로 변경하십시오.

+0

이것은 나를 위해 일했습니다. 고마워요. 어떤 이유로'ps aux'의 출력은 SIGTERM을 프로세스에 보낸 후에 상태'D' 만 반영합니다. –