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

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

내 시스템에 이전 사용자(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')

관련 정보