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