내 스크립트 중 하나에서 find
일반 사용자(루트가 아님)로 명령을 호출했습니다.
반환/계속되지 않아서 스크립트를 종료했지만 find
여전히 실행 중입니다.
나는 htop
항상 하나의 코어를 100% 사용한다는 것을 알았습니다(여기서는 4개의 코어).
그런데 100% 핵심은 수시로 변경됩니다.
htop에서는 상태가 "R"(실행 중)이며 아래 종료 신호 이후에는 변경되지 않습니다.
나는 SIGKILL, SIGSTOP, SIGTERM, SIGABRT, hup, 15를 시도했지만 그 중 아무것도 작동하지 않습니다.
사용되지도 않습니다 sudo
.
또한 가능한 모든 종료 신호를 시도했습니다.
astr=(`kill -l |grep "..[)]" -o |tr -d ')'`)
for str in "${astr[@]}"; do echo "======== $str";kill -$str 2315444;ps -o pid,stat,status,state,pcpu,cmd -p 2315444;sleep 1;done
그러나 매번 결과는 항상 동일합니다.
PID STAT STATUS S %CPU CMD
2315444 RN - R 99.5 find
apparmor
실행 중이지만 find
나열되지 않음(이후조사하다), 중지해도 작동하지 않습니다. SELinux가 아직 실행되지 않고 있으며 LSM을 확인하는 방법을 찾지 못했습니다.
생각하다이것실행 중이던 파티션을 강제로 마운트 해제해 보았지만(문제가 발생하지 않음) 그렇게 한 후에도 find
여전히 실행 중입니다.
재부팅 외에 무엇을 시도할 수 있나요?
dmesg에도 특별한 것은 없습니다.
하드웨어 오류일 수 있나요? 아니면 커널 버그인가요?
다른 프로세스에서도 이런 일이 발생할 수 있다고 생각하지만 확실하지는 않습니다. 어쩌면 하드 디스크 IO 프로세스와 관련이 있을까요?
운영 체제: 우분투 16.04
답변1
다음을 사용하면 다시 시작하는 것을 피할 수 있습니다.
sudo cgcreate -g cpu:/cpulimited
sudo cgclassify -g cpu:cpulimited 2315444 #the `find` pid
cd /sys/fs/cgroup/cpu/cpulimited
echo 1000000 |sudo tee cpu.cfs_period_us
echo 1000 |sudo tee cpu.cfs_quota_us #cant be less than 1000 as I tested
cpu.cfs_quota_us에 대한 전체 설명을 읽어보세요.여기, 따라서힌트
cgroup 마법은 이렇게 죽일 수 없는 프로세스에서 작동합니다!
pcpu가 98%로 표시 되지만 ps
다른 모든 시스템 모니터에서는 이러한 프로세스가 CPU를 거의 사용하지 않는 것으로 표시됩니다(예: htop
" top
시스템 모니터" 응용 프로그램).
이제 항상 100%인 단일 프로세스로 인해 간헐적으로 1초 동안 속도가 느려지기 때문에 머신 사용이 다시 원활해졌습니다.
그래도 프로세스를 종료하는 것 외에 다른 방법에 대한 답변이 kill
더 좋을 것입니다.
모든 팁에 감사드립니다!