Linux 터미널에서 프로세스를 종료하는 방법

프로세스를 종료하는 것이 때때로 프로세스를 제거하는 유일한 방법입니다. 거친 이름에도 불구하고 프로세스를 “종료”한다는 것은 “강제 종료”를 의미합니다. 다음은 Linux 또는 macOS 명령줄에서 수행하는 방법입니다.

프로세스란 무엇입니까?

웹 브라우저와 같은 실행 프로그램, 데스크탑 환경과 관련된 백그라운드 프로세스, Linux 시스템 서비스는 모두 프로세스입니다.

프로세스를 두 그룹으로 묶을 수 있습니다.

포그라운드 프로세스는 사용자가 시작하거나 시작한 프로세스입니다. 터미널 창에 있거나 그래픽 응용 프로그램일 수 있습니다.
백그라운드 프로세스는 자동으로 시작되고 사용자와 상호 작용하지 않는 모든 프로세스입니다. 그들은 사용자로부터 입력을 기대하지 않으며 결과 또는 출력을 제공하지도 않습니다. 백그라운드 프로세스는 서비스 및 데몬과 같은 것입니다.

전경 프로세스가 극장 스태프와 배우의 전면이라면 배경 프로세스는 무대 뒤의 “무대 뒤”팀입니다.

프로세스가 오작동하거나 오작동하면 CPU 시간을 너무 많이 잡아먹거나 RAM을 소모하거나 빡빡한 계산 루프에 들어가 응답하지 않게 될 수 있습니다. 그래픽 응용 프로그램은 마우스 클릭에 응답하지 않을 수 있습니다. 터미널 응용 프로그램은 사용자를 명령 프롬프트로 반환하지 않을 수 있습니다.

인간적인 대답

프로세스를 “종료”한다는 것은 “프로세스를 강제 종료하는 것”을 의미합니다. 프로세스가 응답을 거부하는 경우 필요할 수 있습니다.

Linux는 이를 수행할 수 있도록 kill, pkill 및 killall 명령을 제공합니다. 이러한 명령은 모든 유형의 프로세스, 그래픽 또는 명령줄, 전경 또는 배경과 함께 사용할 수 있습니다.

죽이기 명령

kill을 사용하려면 종료하려는 프로세스의 PID(프로세스 ID)를 알아야 합니다. ps 명령은 프로세스의 PID를 찾는 데 사용할 수 있습니다.

ps가 모든 프로세스를 검색하게 하려면 -e(모든 프로세스) 옵션을 사용하십시오. less를 통해 출력을 파이프하는 것이 좋습니다. 꽤 많을 것입니다. 유형 ps, 공백, -e, 공백, | (파이프 문자), 다른 공백을 입력한 다음 less를 입력합니다. Enter 키를 눌러 명령을 실행합니다.

ps -e | less

그러면 아래 스크린샷과 유사한 프로세스 목록이 표시됩니다. / 키를 사용하여 더 적게 앞으로 검색할 수 있고 ? 키를 사용하여 뒤로 검색할 수 있습니다. 열쇠.

관심 있는 프로세스로 돌아가려면 ps에서 grep을 통해 출력을 파이프하고 프로세스의 이름(또는 이름의 일부)을 지정합니다.

ps -e | grep shutter

종료하려는 프로세스의 PID를 찾으면 이를 매개변수로 kill 명령에 전달하십시오. 이전 명령으로 식별된 셔터 프로세스를 종료하려면 다음 명령을 사용하십시오.

kill 2099

kill 명령은 조용한 암살자이며 성공하면 피드백을 제공하지 않습니다.

pkill 명령

pkill 명령을 사용하면 이름으로 프로세스를 종료할 수 있습니다. PID로 프로세스를 식별할 필요가 없습니다. pkill을 사용하려면 pkill이 실행 중인 프로세스 목록을 확인하는 데 사용하는 검색어를 제공합니다. 매칭 프로세스가 종료됩니다. 따라서 해당 검색어의 철자가 올바른지 확인해야 합니다.

안전망으로 pkill 명령을 사용하기 전에 pgrep 명령을 사용할 수 있습니다. pgrep 명령은 검색어도 허용합니다. 검색어와 일치하는 각 프로세스의 PID를 나열합니다. pgrep은 프로세스에 kill 신호를 보내지 않고 검색어를 잘못 입력해도 실수로 다른 프로세스를 죽이지 않기 때문에 이것은 안전합니다. pkill에 전달하기 전에 검색어를 올바르게 생각했는지 확인할 수 있습니다. pkill과 pgrep은 모두 같은 방식으로 검색어를 처리합니다. 그들의 치료는 너무 유사하여 같은 매뉴얼 페이지 공유.

이름에 “subq”가 포함된 프로세스가 있다고 가정해 보겠습니다. 우리는 ps -u dave | grep 명령으로 커튼 뒤를 엿볼 수 있습니다. “subq”가 해당 프로세스와 해당 프로세스만 일치한다는 것을 알 수 있습니다. 그것은 단지 당신이 프로세스의 전체 이름을 볼 수 있도록 하기 위한 것입니다.

ps -u dave | grep subq

사용자가 그렇게 하지 않았다고 가정해 보겠습니다. 그들이 아는 것은 프로세스 이름에 하위 문자열 “subq”가 포함되어 있다는 것뿐입니다. 그들은 pgrep을 사용하여 검색어와 일치하는 항목이 하나만 있는지 확인합니다. 그런 다음 해당 검색어를 pkill과 함께 사용합니다.

pgrep subq
pkill subq

pkill을 사용하여 한 번에 여러 프로세스를 종료할 수 있습니다. 여기에서 사용자는 pgrep을 실행하여 Chrome이 실행한 프로세스 수를 확인합니다. 그들은 pkill을 사용하여 그들을 모두 죽입니다. 그런 다음 pgrep으로 모두 제거되었는지 확인합니다.

pgrep chrome
pkill chrome
pgrep chrome

동일한 이름을 가진 여러 프로세스가 실행 중이지만 모두 종료하고 싶지 않다면 pgrep을 -f(명령줄) 옵션과 함께 사용하여 어떤 프로세스가 어느 프로세스인지 식별할 수 있습니다. 간단한 예는 두 개의 ping 프로세스입니다. 당신은 그들 중 한 명을 죽이고 싶지만 다른 한 명을 죽이고 싶지 않습니다. 명령줄을 사용하여 이들을 구별할 수 있습니다. 명령줄 매개변수를 래핑하기 위해 따옴표를 사용하는 것에 유의하십시오.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

killall 명령

경고: Solaris 및 OpenIndiana 운영 체제에서 killall 명령은 사용자에게 속한 모든 프로세스를 종료합니다. 루트이거나 sudo killall을 실행한 경우 컴퓨터를 재부팅합니다! 이 기사에 대한 연구 중에 이 동작은 최신 버전의 OpenIndiana Hipster 2018.10에서 확인되었습니다.

killall 명령 비슷한 방식으로 작동 pkill 명령에 적용되지만 특정 차이점이 있습니다. 명령에 검색어를 전달하는 대신 정확한 프로세스 이름을 제공해야 합니다.

프로세스 이름에 부분 일치를 제공할 수 없습니다. 다음과 같이 전체 프로세스 이름을 제공해야 합니다.

killall shutt
killall shutter

-y(이하) 옵션을 사용하면 지정된 기간 미만 동안 실행된 프로세스를 종료할 수 있습니다. 기간은 다음 단위 중 하나가 뒤에 오는 숫자로 표시됩니다.

초(초)
m(분)
시(시간)
d(일)
승(주)
M(월, 참고, 대문자 “M”)
y(년)

방금 시작된 ana라는 프로세스를 종료하고 ana의 이전 인스턴스를 실행 중인 상태로 두려면 2분 이내에 반응했다면 killall과 함께 다음 매개변수를 사용할 수 있습니다.

killall -y 2m ana

-o(이전) 옵션을 사용하면 지정된 기간보다 오래 실행된 프로세스를 종료할 수 있습니다. 이 명령은 하루 이상 실행된 모든 ssh 연결을 종료합니다.

killall -o 1d sshd

너무 기뻐하지 마세요

이 명령을 사용하면 정확하고 안전하게 잘못된 프로세스를 식별하고 종료할 수 있습니다.

항상 조심하십시오. 먼저, 죽이려는 프로세스가 실제로 원하는 프로세스인지 확인하십시오. 두 번째, 다시 한 번 확인하십시오. 조심하고 대상 프로세스가 종료하려는 프로세스인지 확인하십시오. 만족스러우면 프로세스 종료를 진행하십시오.