Top에 표시된 프로세스를 제거하여 일부 메모리를 정리하세요.

Top에 표시된 프로세스를 제거하여 일부 메모리를 정리하세요.

내 시스템에 이전 사용자(bob)가 있습니다. 'top'의 출력에 따르면 이 사용자가 많은 프로세스를 실행하는 것으로 보입니다(대부분의 명령은 'java'입니다). 루트 액세스 권한이 있으므로 사용자를 삭제했지만 프로세스는 여전히 사용자를 '1000'으로 계속 실행합니다. 이러한 프로세스가 영구적으로 실행되는 것을 어떻게 중지합니까?

답변1

사용자를 삭제하고 사용자가 가지고 있을 수 있는 cronjob 등도 삭제한 경우 시스템을 재부팅하면 시스템이 다시 시작될 때 다시 시작하지 않고 해당 프로세스가 종료됩니다.

재부팅이 옵션이 아닌 경우 다음을 사용하여 UID 1000을 가진 사용자에 속한 모든 프로세스에 종료 신호를 보낼 수 있습니다.

sudu pkill -u 1000

처음 실행하면 해당 명령의 영향을 받는 프로세스를 확인할 수 있습니다.

pgrep -u 1000

또한보십시오 man pkill.

답변2

먼저 서버의 모든 프로세스의 현재 상태를 파일로 저장하겠습니다.

ps -wwfax -o uid=,pid=,ppid=,cmd=   > /root/list_of_process_as_today.txt

그 후에는 나쁜 사용자에 집중하겠습니다.

ps -wwfax -o uid=,pid=,ppid=,cmd=  | sed '/^ *1000  *\([0-9][0-9]*\) .*$/p;d'

출력의 예는 다음과 같습니다.

 1000  3096  3087      \_ sshd: em444@pts/0
 1000  3099  3096          \_ -bash
 1000  3543  3099              \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
 1000  3544  3099              \_ sed /^ *1000  *\([0-9][0-9]*\) .*$/p;d
 1000 21628     1 SCREEN
 1000 21629 21628  \_ /bin/bash

프로세스 목록 분석

내 현재 쉘은 프로세스 3099 입니다. 내가 실행한 명령인 일부 하위 프로세스를 볼 수 있습니다.3543및 부모 중 한 명3096

당신은 프로세스 21628을 볼 수 있습니다. 그의 부모는 프로세스입니다.1, 프로세스1모든 프로세스의 부모입니다.

그런 다음 이 명령을 사용하여 모든 프로세스를 종료할 수 있습니다.

kill  $(/root/list_of_process_as_today.txt  | sed 's/^ *1000  *\([0-9][0-9]*\) .*$/\1/p;d')

관련 정보