Linux에서 원격 프로세스를 어떻게 찾고 종료합니까?

Linux에서 원격 프로세스를 어떻게 찾고 종료합니까?

작동 중인 데몬을 개발 중인데 이제 새 프로세스를 생성할 수 없습니다(즉, 다른 악성 프로세스를 종료하기 위해 새 프로세스를 시작할 수 없습니다). 따라서 원격 시스템에서 프로세스를 종료할 수 있어야 합니다. 관리자 권한 없이 원격으로 "종료"하려면 어떻게 해야 합니까? 일반 사용자로서 원격 컴퓨터에서 내 프로세스를 종료할 수 없는 경우 이를 정답으로 표시할 수 있도록 알려주세요.

답변1

머신에서 실행 중인 프로세스를 종료하려면 일부 로컬 프로세스(또는 커널)가 종료 신호를 내보내야 합니다. 따라서 프로세스가 해당 신호를 내보내도록 하는 방법이 필요하며, 새 프로세스를 생성할 수 없으므로 이미 실행 중인 프로세스에만 의존하는 방법을 찾아야 합니다.

여기서는 도움이 될 수 있는 표준 데몬이 없습니다. 이들은 모두 귀하의 인증을 처리한 다음 귀하로 실행되는 새 프로세스(예: 셸)를 포크합니다. 따라서 콘솔에 액세스할 수 없고 시스템과 기존 상호 작용이 없다면 운이 없는 것입니다.


귀하의 의견에 따르면 아직 컴퓨터에 셸이 있는 것 같습니다. 그러면 당신이 할 수 있는 일이 있습니다. ls또는 같은 외부 프로세스를 실행할 수 없습니다 ps. 그러나 , 및 ( 모든 쉘에 내장되어 있는 것은 아니지만 bash 및 zsh와 같이 작업 제어를 지원하는 모든 쉘에 하나입니다) 와 echo같은 내장 명령을 실행할 수 있습니다 .readkillkill

각 프로세스에는 다음 아래에 연관된 디렉토리가 있습니다 /proc. /proc/12345여기서 12345는 프로세스 ID입니다. 따라서 를 탐색하여 기존에 대한 정보를 얻을 수 있습니다 /proc. echo여기서는 와일드카드를 사용하는 것이 도움이 됩니다. 예를 들어 cd /proc; echo [0-9]*실행 중인 모든 프로세스의 프로세스 ID를 표시합니다. 쉘이 zsh인 경우 glob 한정자를 사용하여 많은 작업을 수행할 수 있습니다. 예를 들어 echo /proc/*(u$UID)사용자 ID로 실행 중인 프로세스만 표시됩니다.

포크하지 않고 파일의 내용을 표시하는 방법은 다음과 같습니다.

while read -r line; do
  echo "$line"
done </path/to/file

여러 프로세스를 모두 에 전달하여 한 번에 종료할 수 있습니다 kill. 데몬에 속한 프로세스를 식별한 경우 그룹 리더의 프로세스 ID가 kill -9 -PGID어디에 있는지를 사용하여 해당 프로세스 그룹을 종료해 보십시오. PGID를 사용하여 프로세스 123의 프로세스 그룹 ID를 찾을 수 있습니다 </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp. (동일한 정보가 더 읽기 쉬운 형식으로 존재 /proc/123/하지만 이를 읽을 수 있는 상태가 아닙니다.) 다음을 사용하여 모든 프로세스(원래 쉘 포함)에 신호를 보낼 수도 있습니다.

trap : NUM
kill -NUM -1

명령이 쉘에서 신호를 무시하도록( 트랩할 수 없음) KILL(9) 이외의 NUM 값을 선택하십시오 .trapKILL

답변2

다음 정보는 다음에서 발견되었습니다.http://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Linux/UNIX에서 kill 명령을 사용하여 프로세스 종료

kill 명령은 Linux 및 UNIX/BSD와 같은 운영 체제에서 모두 작동합니다.

1단계: 먼저 프로세스 PID(프로세스 ID)를 찾아야 합니다.

프로세스 ID(PID)를 찾으려면 ps 명령이나 pidof 명령을 사용하십시오. 구문: ps aux | grep 프로세스 이름 pidof 프로세스 이름

예를 들어 프로세스 이름이 lighttpd인 경우 다음 명령 중 하나를 사용하여 프로세스 ID를 얻을 수 있습니다.

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

또는 실행 중인 프로그램의 프로세스 ID를 찾는 데 사용되는 pidof 명령을 사용하십시오.

pidof lighttpd

산출

3486

2단계: PID(프로세스 ID)를 사용하여 프로세스 종료

위 명령은 lighttpd 프로세스의 PID(3486)를 알려줍니다. 이제 이 PID를 사용하여 프로세스를 종료합니다.

# kill 3486

또는

# kill -9 3486

여기서 -9는 프로세스를 종료하는 특수 Kill 신호입니다.

killall 명령 예

UNIX 시스템에서는 killall 명령을 사용하지 마십시오(Linux 전용 명령). killall 명령을 사용할 수도 있습니다. killall 명령은 이름으로 프로세스를 종료합니다(PID를 찾을 필요 없음).

# killall -9 lighttpd

Firefox 프로세스 종료:

# killall -9 firefox-bin

앞에서 말했듯이 UNIX 시스템의 killall은 다른 작업을 수행합니다. 특정 프로세스뿐만 아니라 모든 프로세스를 종료합니다. UNIX 시스템에서는 killall을 사용하지 마십시오(kill -9 사용).

답변3

귀하의 의견에서 말씀하신 것처럼 관리자는 현재 귀하에게 도움을 줄 수 있는 유일한 사람입니다. 얻으시길 권해드립니다펄 요리책좀비를 처리하는 올바른 방법은 섹션 16.19를 읽어보세요.

관련 정보