모듈을 언로드하지 않을 때까지 무한 루프를 실행하고 싶은 모듈을 만들었습니다. 현재 rmmod를 사용하면 모듈이 여전히 바쁘다는 것을 알게되고 얼마 후 커널 패닉이 발생합니다.리눅스 커널 모듈에서 무한 루프 실행
while(1)
{
.......
}
모듈을 언로드 할 때까지 무한 루프를 실행할 수있는 트릭이 있습니까?
모듈을 언로드하지 않을 때까지 무한 루프를 실행하고 싶은 모듈을 만들었습니다. 현재 rmmod를 사용하면 모듈이 여전히 바쁘다는 것을 알게되고 얼마 후 커널 패닉이 발생합니다.리눅스 커널 모듈에서 무한 루프 실행
while(1)
{
.......
}
모듈을 언로드 할 때까지 무한 루프를 실행할 수있는 트릭이 있습니까?
이 루프는 어떤 상황에서 실행됩니까? 이것은 매우 중요한 질문입니다.
init_module
을 실행하면 insmod
프로세스가 절대 종료되지 않으므로 상당히 나쁩니다.
일부 시스템 호출이 실행되는 경우 시스템 호출이 반환되지 않으며 잘못 될 수도 있습니다.
두 경우 모두 프로세스를 죽일 방법이 없습니다 (심지어 kill -9
아님).
softIRQ 처리기 (또는 더 나쁜 경우 hardIRQ 처리기)에서 처리하는 경우 시스템이 중단됩니다.
이 작업에 전념하는 커널 스레드에서 수행하는 경우 제대로 수행 할 수 있습니다.
하지만 CPU를 완전히 먹고 싶지 않으면 스케줄러를 호출하여 다른 작업을 실행해야합니다. msleep_interruptible
은 좋은 방법입니다.
잘 모르겠지만 while (1) while (notStopped)을 사용하십시오. 처음에는 1로 설정되고 stop_module()에서는 0으로 설정됩니다.
모듈을 언로 드하지만 두 번째 시스템은 교수형에 처한 ..... – karan421
이것은 좋은 생각 같지 않습니다. 무엇을 성취하려고합니까? – stsquad
타이머 인터페이스를 대신 사용해보십시오. http://kerneldeveloper.drupalgardens.com/addtimer-function –