데몬에서 파일을보다 효율적으로 모니터링하는 방법을 찾고 있습니다. 나는 두 파일 (/proc/btn_sw1
과 /proc/btn_sw2
)을 보려고 반복하는 스크립트를 썼다 ... 나는 루핑이 나쁜 아이디어라는 것을 알고, 나는 깨닫지 못했다. 어떻게 나쁜 것일까.리눅스 데몬에서 효율적인 파일 검사
내 데몬이 자동으로 init 프로세스를 통해 시작되고, 그것이 시작 후 나는 top
출력을 확인하고 내 프로세스가 지속적으로 # 1 실행 ~ 17 %의 CPU를했다 :
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
1698 1 root S 2196 0% 17% {resetd.sh} /bin/sh /etc/init.d/resetd
내 데몬이/PROC 항목을 모니터링 (그 값은 단지 1 또는 0입니다). 하드웨어 버튼을 눌렀거나 놓을 때 키패드 드라이버가 설정합니다. 그래서이 파일의 가치가 언제 바뀌는 지 알아야합니다.
파일의 값이 변경되면 내 데몬이 깨어날 수있는 방법이 있습니까? 참고 : 버튼을 얼마나 오랫동안 누르고 있었는지 타임 아웃해야하기 때문에 각 읽기 사이에 X 초 동안 잠자고 싶지는 않습니다. 시작을 놓치지 않으려 고합니다.
나의 현재 데몬 코드 :
#!/bin/sh
proc1file=/proc/btn_sw1
proc2file=/proc/btn_sw2
BTN1VAL=$(cat $proc1file)
BTN2VAL=$(cat $proc2file)
tic=0
elap_time=0
reset_met=0
until [ $reset_met -gt 0 ]
do
BTN1VAL=$(cat $proc1file)
BTN2VAL=$(cat $proc2file)
if [ $BTN1VAL -gt 0 ] && [ $BTN2VAL -gt 0 ]
then
tic=`date +%S`
# Start the 10second loop, I'm ok with reading in here, but before this I'd like
# to be sleeping or idle instead of constantly polling
until [ $elap_time -ge 5 ] || [ $BTN1VAL -lt 1 ] || [ $BTN2VAL -lt 1 ]
do
BTN1VAL=$(cat $proc1file)
BTN2VAL=$(cat $proc2file)
toc=`date +%S`
elap_time=`expr $toc - $tic`
done
if [ $elap_time -ge 5 ]
then
reset_met=1
else
elap_time=0
fi
fi
done
echo "Rebooting!"
reboot -f
md5를 직접 확인할 수 있습니까? 'md5' 또는'md5sum' 명령을 사용하여 파일이 변경되었는지 여부를 확인할 수 있습니다. 퍼포먼스는 고양이에게 직접적으로 더 낫다. – BMW