작업을 하다보면 프로그램이 갑자기 멈추는 경우가 있습니다. 다른 경우에는 프로그램이 여전히 실행 중이지만 프로세서나 메모리를 많이 사용합니다. ps
를 사용하여 Linux에서 이 문제를 해결할 수 있는 방법이 있습니다. (P 프로세스 S tatus) 명령. 여기에서는 ps
를 사용하는 방법을 보여줍니다. Linux에서 명령을 사용하여 현재 실행 중인 프로세스와 해당 PID를 나열합니다. 그런 다음 리소스를 소모하는 프로세스를 찾아 종료할 수 있습니다.
"ps" 명령 사용
ps
명령을 단독으로 사용할 수 있습니다. 4개의 정보 열이 출력됩니다.
- PID :시스템에서 정의한 프로세스의 고유 식별자입니다. 프로세스를 중지하는 데 사용하는 값입니다.
- TTY :프로세스가 시작된 터미널입니다.
- 시간 :프로세스에서 사용한 총 CPU 시간입니다.
- CMD :프로세스를 생성하는 명령
옵션 없이 명령을 사용하면 많은 정보가 표시되지 않습니다. 다음은 더 유용하게 사용할 수 있는 몇 가지 방법입니다.
1. 모든 사용자의 프로세스 나열
일부 프로그램이 설치되면 프로세스를 실행하기 위해 추가 사용자를 생성하기도 합니다. 사용자의 프로세스를 나열하려면 -e
를 사용하십시오. 옵션:
ps -e
및 출력:
PID TTY TIME CMD 1 ? 00:00:02 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 kworker/0:0 4 ? 00:00:00 kworker/0:0H 5 ? 00:00:00 kworker/u256:0 6 ? 00:00:00 mm_percpu_wq
2. 추가 정보가 포함된 프로세스 나열
실행 중인 프로세스를 나열할 때 더 많은 정보를 가질 수 있습니다. 이렇게 하려면 ef
를 사용할 수 있습니다. 옵션.
ps -ef
및 출력:
UID PID PPID C STIME TTY TIME CMD root 1 0 0 21:34 ? 00:00:03 /sbin/init maybe-ubiquity root 2 0 0 21:34 ? 00:00:00 [kthreadd] root 3 2 0 21:34 ? 00:00:00 [kworker/0:0] root 4 2 0 21:34 ? 00:00:00 [kworker/0:0H] root 6 2 0 21:34 ? 00:00:00 [mm_percpu_wq] root 7 2 0 21:34 ? 00:00:00 [ksoftirqd/0]
3. 프로세스 ID로 프로세스 필터링
표시하려는 실행 중인 프로세스의 프로세스 ID를 알고 있는 경우 -p
를 사용하여 구체적으로 필터링할 수 있습니다. 깃발. 공백 없이 하나의 쉼표로 구분된 여러 PID를 인수로 사용할 수 있습니다.
ps -ef -p 1234,5678,9012
4. 사용자가 소유한 프로세스 나열
u
를 사용하여 사용자가 소유한 프로세스를 나열할 수도 있습니다. 옵션 다음에 사용자 이름:
ps -u userName
및 출력:
PID TTY TIME CMD 2832 ? 00:00:00 systemd 2842 ? 00:00:00 (sd-pam) 3043 ? 00:00:00 sshd 3044 pts/1 00:00:00 bash 18396 pts/1 00:00:00 ps
5. 활성 프로세스 나열
ax
를 사용하여 활성화된 모든 프로세스를 나열할 수 있습니다. 옵션:
ps -ax
및 출력:
PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /sbin/init maybe-ubiquity 2 ? S 0:00 [kthreadd] 3 ? I 0:00 [kworker/0:0] 4 ? I< 0:00 [kworker/0:0H] 6 ? I< 0:00 [mm_percpu_wq] 7 ? S 0:00 [ksoftirqd/0]
6. 사용자와 함께 활성 프로세스 나열
-aux
를 추가하면 사용자와 함께 모든 활성 프로세스를 나열할 수 있습니다. 플래그:
ps -aux
및 출력:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 78132 9188 ? Ss 21:34 0:02 /sbin/init maybe-ubiquity root 2 0.0 0.0 0 0 ? S 21:34 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I 21:34 0:00 [kworker/0:0] root 4 0.0 0.0 0 0 ? I< 21:34 0:00 [kworker/0:0H] root 6 0.0 0.0 0 0 ? I< 21:34 0:00 [mm_percpu_wq] root 7 0.0 0.0 0 0 ? S 21:34 0:00 [ksoftirqd/0] root 8 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_sched] root 9 0.0 0.0 0 0 ? I 21:34 0:00 [rcu_bh] root 10 0.0 0.0 0 0 ? S 21:34 0:00 [migration/0]
7. 프로그램 이름으로 프로세스 필터링
ps
에 필터를 적용하여 실행 중인 특정 프로그램에 대한 정보를 검색할 수 있습니다. 결과:
ps -aux | grep docker
및 출력:
root 1508 0.0 2.2 1518156 90868 ? Ssl 21:34 0:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock userkub+ 18429 0.0 0.0 13144 1108 pts/1 S+ 23:57 0:00 grep --color=auto docker
또는 C
를 사용할 수도 있습니다. 이름으로 프로세스를 필터링하는 옵션:
ps -C name
8. 특정 열 표시
4개의 기본 열 외에도 ps
를 얻을 수 있습니다. 추가 정보 열을 표시합니다. 예:
ps -e -o pid,uname,pcpu,pmem,comm
-o
플래그는 ps
에 대한 특정 출력 표시 옵션을 설정합니다. 명령의 결과. ps에 대한 표준 디스플레이 옵션의 전체 목록을 참조하십시오.
9. 계층적 트리 스타일로 결과 표시
ps -e --forest
이것은 ASCII 아트를 사용하여 프로세스를 표시하기 위한 트리 스타일 구조를 만듭니다. 분기된 프로세스와 하위 프로세스를 적절한 상위 프로세스의 자손으로 표시하여 일치하도록 정렬합니다. 트리의 "가지"를 숨기려면 -H
를 사용하십시오. --forest
대신 .
10. 프로세스 스레드 표시
ps -p 4041 -L
-L
플래그는 ps의 모든 기능에 대해 스레드 디스플레이를 토글합니다. 특정 프로세스의 스레드를 추적할 때 가장 유용합니다.
11. 모든 루트 프로세스 표시
ps -f -U root -u root
실제적이고 효과적인 루트 ID로 실행 중인 모든 프로세스에 대한 검색을 실행합니다. -f
덕분에 전체 길이 형식으로 표시됩니다. 깃발. -o
와 결합할 수 있습니다. 출력을 사용자 정의하는 플래그입니다.
kill 명령을 사용하여 프로세스 중지
오작동하는 프로세스를 찾으면 kill 명령을 사용하여 실행 중인 프로세스를 종료할 수 있습니다. 이 명령은 프로세스를 종료하는 신호를 보냅니다. 프로그램이 정지되면 대부분의 경우 -9
를 사용하여 강제 종료해야 합니다. 옵션.
ps의 출력은 인스턴트 뷰입니다. htop
과 달리 , 자신을 동적으로 업데이트하지 않습니다. 이것은 어떤 프로세스가 오작동하는지에 대한 명확한 그림을 얻기 위해 여러 번 실행해야 할 수도 있음을 의미합니다. 프로세스의 최신 보기를 얻으려면 Linux 시스템에 대한 몇 가지 다른 명령을 시도할 수 있습니다.