Linux에서 일종의 "블랙리스트"에 프로세스를 추가하는 방법이 있습니까?
답변1
일반적인 접근 방식은 원하지 않는 작업을 계속 수행하지 않도록 모니터 구성을 변경하는 것입니다. 어떤 이유로든 이 작업을 수행할 수 없다고 가정하지만 다른 방법은 해결 방법이며 모든 경우에 작동하지 않습니다.
누군가를 블랙리스트에 올릴 수는 없습니다프로세스: 프로세스는 런타임 엔터티입니다. 프로세스가 시작되기 전에는 존재하지 않습니다. 일단 시작하면 멈추기에는 너무 늦습니다. 어쨌든 시작해서는 안되는 프로세스를 어떻게 식별합니까?
누군가를 블랙리스트에 올릴 수 있습니다프로그램, 더 정확하게는 프로그램의 특정 설치입니다. 모든 프로그램은 실행 파일에서 시작됩니다. 따라서 존재하지 않는 실행 파일을 예약하면 시작되지 않습니다. 삭제하거나, 이름을 바꾸거나, 실행 불가능하게 만들 수도 있습니다.
chmod a-x /path/to/program
어떤 이유로 파일 시스템을 수정하고 싶지 않거나 수정할 수 없지만 루트 액세스 권한이 있는 경우 보안 프레임워크(예: SELinux 또는 AppArmor)를 사용하여 모니터가 이 특정 프로그램을 실행하지 못하도록 비활성화할 수도 있습니다. 그러나 그것은 더 복잡합니다.
그러나 모니터가 프로그램 재생성을 계속 시도하는 경우 실행 파일이 사라지면 현명하게 반응할 수도 있고 그렇지 않을 수도 있습니다. 스팸(또는 오류 메시지가 포함된 일부 로그 파일)을 보낼 수도 있습니다.
모니터가 프로그램 활성 상태만 유지한다고 가정하면(프로그램 기능을 확인하는 대신, 예를 들어 웹 서버 프로세스에 대한 모니터는 주기적으로 웹 페이지에 액세스하고 응답이 없을 경우 서버를 다시 시작하려고 시도할 수 있음) 다음을 수행할 수 있습니다.바꾸다이 프로그램은 아무것도 하지 않고 영원히 차단하는 프로그램으로 구성됩니다. 기본 유틸리티 모음에는 이 작업을 수행하는 프로그램이 없지만 쉽게 작성할 수 있습니다.
#!/bin/sh
while sleep 999999999; do :; done
pkill -STOP programname
프로그램을 차단하려는 이유에 따라 원래 프로그램의 프로세스(프로세스 ID 1234 또는 1234가 프로세스 ID임)를 일시 중단하여 kill -STOP 1234
유사한 결과를 얻을 수도 있고 얻지 못할 수도 있습니다 . 이는 프로세스를 보존하지만 명시적으로 복원될 때까지 아무 작업도 수행하지 않습니다(사용 kill -CONT
). 프로세스는 CPU 시간을 소비하지 않으며 시스템에서 다른 작업을 위해 RAM이 필요할 때 해당 메모리를 교체하지만 열려 있는 파일과 같은 리소스는 계속해서 소비합니다.
답변2
죽이기보다는 얼려보는 것을 추천합니다. 모니터링 프로세스가 처리되는 방식에 따라 이 정도면 충분할 수 있습니다.
kill -STOP <pid>
답변3
신뢰할 수 있는 방법은 프로그램 이름을 바꾼 다음 다시 종료하는 것입니다. 다시 작동하게 되면 원래 이름으로 복원하세요.
답변4
sudo vi /etc/passwd
프로그램에 의해 재생성된 사용자를 삭제합니다. 이렇게 하면 프로세스와 재생이 중지됩니다.