해당 포스팅은 William E. Shotts, Jr.의 오픈소스 저서 The Linux Command Line(링크)을 기반으로 작성되었습니다.

현대의 운영체제는 대부분 멀티태스킹을 지원합니다. 멀티태스킹은 하나의 컴퓨터가 동시에 여러 작업을 처리하는 것 처럼 보이게 하는 기능입니다. 실제로는 운영체제가 여러 프로그램간에 매우 빠르게 전환하면서 각 프로그램을 실행시키는 뒷작업(?)이 진행중인 것이죠. 리눅스 커널은 프로세스(process)를 통해 멀티태스킹을 수행합니다. 프로세스는 실행 중인 프로그램을 의미합니다. 커널은 프로세스 스케줄링, 즉 어떤 프로세스를 언제 실행할지 결정하는 역할을 합니다. 커널은 스케줄링 알고리즘을 사용하여 CPU를 여러 프로세스에 할당함으로써 시스템이 원활하고 빠르게 동작하도록 합니다.
때로는 컴퓨터가 느려지거나 애플리케이션이 응답하지 않는 경우가 일어납니다. 이번 장에서는 실행중인 프로그램을 모니터링하고 오동작하는 프로세스를 종료하는 커맨드 라인 도구들을 알아보겠습니다.
이번 장에서 소개할 명령어들은 다음과 같습니다
- 실행중인 프로세스의 스냅샷을 보고ps - 실행 중인 작업을 실시간으로 표시top - 현재 쉘 세션에서 실행 중인 작업의 목록을 표시jobs - 특정 작업을 백그라운드로 이동bg - 백그라운드나 일시 중단된 작업을 포어그라운드로 가져옴fg - 특정 프로세스에 시그널을 보내 종료하거나 다른 행동을 취하게 함kill - 이름을 기준으로 프로세스를 종료killall - 시스템을 종료하거나 재부팅함shutdown
프로세스 작동 방식
컴퓨터가 부팅될 때, 커널이 가장 먼저 메모리에 로드되고 실행됩니다. 커널이 시스템을 시작한 후
프로그램은 또 다른 프로그램을 실행시킬 수 있는데 이를 "부모 프로세스(parent process)가 자식 프로세스(child process)를 생성한다"고 표현합니다.
커널은 시스템의 모든 프로세스에 대한 정보를 유지하고 관리하는 역할을 합니다. 예를 들어, 각 프로세스에는 고유한 번호가 할당되며 이 번호를 프로세스 ID (PID)라고 합니다. PID는 오름차순으로 할당되며, 시스템의 첫 번째 프로세스인
프로세스 확인
프로세스를 확인하는 방법들 중 가장 흔히 사용되는 것은

위 결과는 두 개의 프로세스를 보여줍니다. 프로세스 5198과 프로세스 10129는 순서대로

"x" 옵션(앞에 대시를 사용하지 않습니다)을 추가하면 사용자가 소유한 모든 프로세스를 보여줍니다. 이 옵션은 터미널과 관계없이 실행 중인 모든 프로세스를 나열하도록 합니다.
시스템은 많은 프로세스가 동시에 실행되고 있어
Table 10-1: 프로세스 상태
상태 | 의미 |
프로세스가 실행중이거나 실행될 준비가 되었음을 의미 | |
프로세스가 실행중이 아님. 특정 이벤트(예: 키 입력, 네트워크 패킷 등)를 기다리는 상태. CPU를 사용하지 않음 | |
프로세스가 I/O 작업(예: 디스크 드라이브 접근)을 기다리는 상태. 이 상태는 중단할 수 없음 | |
프로세스가 중지된 상태. 프로세스를 일시 중지했을 때 발생 | |
좀비 프로세스라고도 하며, 종료되었지만 부모 프로세스가 이를 정리하지 않은 상태. 시스템 리소스를 거의 사용하지 않지만, 프로세스 테이블에서 여전히 자리를 차지 | |
높은 우선순위의 프로세스. 이 프로세스는 CPU 시간을 더 많이 할당 받으며, 이는 niceness라는 프로세스 특성에 의해 결정됨. '덜 nice'한 프로세스는 다른 프로세스보다 더 많은 CPU 시간을 차지함 | |
낮은 우선순위의 프로세스. 'nice'한 프로세스라고도 하며, 다른 높은 우선순위의 프로세스가 서비스를 받은 후에야 CPU 시간을 할당받게 됨 |
프로세스 상태에 따라 추가로 붙은 수 있는 문자들이 있으며, 이는 다양한 특수한 프로세스 특성을 나타냅니다. 자세한 내용은
많이 사용하는 다른 옵션 세트는 "aux"(a, u, x 각각이 개별 옵션)입니다. 이 옵션은 훨씬 더 많은 정보를 보여줍니다.

이 옵션 세트는 다양한 사용자와 관련된 프로세스를 더욱 상세하게 보여줍니다. 옵션을 대시(-) 없이 사용하면 "BSD 스타일"로 동작합니다. 이는 BSD Unix에서 사용되는
Table 10-2: BSD 스타일의
헤더 | 의미 |
프로세스 소유자의 사용자 ID | |
프로세스의 CPU 사용률 | |
프로세스의 메모리 사용률 | |
프로세스가 사용 중인 가상 메모리의 크기. 킬로바이트(KB) 단위 | |
프로세스가 사용 중인 물리적 메모리의 크기. 킬로바이트(KB) 단위 | |
프로세스가 시작된 시간. 24시간 이상 경과한 프로세스의 경우, 날짜로 표시됨 |
top - 동적 프로세스 모니터링


시스템 요약은 유용한 정보를 잔뜩 가지고 있습니다. 아래 표에서 디테일한 부분을 설명하겠습니다:
Table 10-3:
행 | 필드 | 의미 |
1 | 프로그램의 이름 | |
현재 시간 | ||
업타임(uptime). 마지막 부팅 이후 지난 시간. 예시에서는 6시간 30분이 흐름 | ||
2명의 사용자가 로그인 되어있음 | ||
로드 평균(load average)은 일정 시간 동안 시스템에서 실행 대기중인 프로세스의 평균 수를 나타냄. 실행 대시 중인 프로세스란 CPU에서 실행되기를 기다리는 프로세스를 의미. 로드 평균은 세 가지 값으로 표시됨: 첫 번째 값은 1분 평균, 두 번째 값은 5분 평균, 세 번째 값은 15분 평균을 나타냄. | ||
2 | 프로세스의 수와 프로세스 상태를 요약 | |
3 | CPU 사용 상태를 실시간으로 보여줌 | |
사용자 프로세스(user process)를 위해 0.7%의 CPU가 사용중임을 나타냄. 커널 외부의 프로세스를 의미 | ||
시스템 (커널) 프로세스가 1.0%의 CPU를 사용중임을 나타냄 | ||
0.0%의 CPU가 "nice"한(우선순위가 낮은) 프로세스에 사용되고 있음을 나타냄 | ||
CPU의 98.3%가 사용되지 않고 남아있는 것을 나타냄 | ||
CPU의 0.0%가 I/O 작업을 기다리고 있음을 나타냄 | ||
4 | 사용중인 물리적 램(RAM)을 보여줌 | |
5 | 스왑 공간(가상 메모리) 사용 상태를 보여줌 |
주요 데스크탑 환경(GNOME, KDE)에서는
프로세스 제어
! 이번 절에서는 리눅스 데스크탑 버전을 요구하는 실습이 진행됩니다.
프로세스를 모니터링하는 방법을 배웠으니 제어하는 방법도 알아보겠습니다. 실습을 위해

명령어를 입력한 후에는 로고가 그려진 작은 창이 나타날 것입니다. 일부 시스템에서 경고가 출력될 수 있는데, 이는 무시해도 됩니다.

Tip: 만약 시스템에가 없을 경우 xlogo 대신 xlogo 이나 gedit 를 사용해보세요. kwrite
쉘의 프롬프트가 반환되지 않는 것이 보이시나요? 이는 쉘이 현재 실행중인
프로세스 중단하기
이제

터미널에서
모든 프로그램이 이 신호를 처리하는 것은 아니지만, 많은 프로그램이 SIGINT 신호를 처리하여 정상 종료됩니다.
프로세스를 백그라운드로 실행
우리가

명령을 입력하면

쉘의 작업 제어 기능에는 터미널에서 시작된 작업의 목록을 보여주는 기능도 있습니다.

출력된 결과로부터 현재 실행 중인 작업이 한 개 있고 작업 번호는 1번이며
프로세스를 포어그라운드로 반환
백그라운드에 있는 프로세스는

프로세스 일시중지하기
작업을 중단하지 않고 잠시 정지만 해두고 싶은 경우가 있습니다. 포어그라운드 프로세스를 백그라운드로 보내고 싶을 때 일시중지를 하는 경우가 종종 있죠. 키보드로



작업이 한 개 뿐이라면
그래픽 프로그램을 커맨드 라인에서 실행할 때
왜 그래픽 프로그램을 커맨드 라인에서 실행하는 것이 좋을까요? 두 가지 이유가 있습니다.
- 메뉴에 없는 프로그램 실행: 윈도우 매니저의 메뉴에 등록되어있지 않은 프로그램을 실행할 때, 커맨드 라인을 사용하면 프로그램을 쉽게 실행할 수 있습니다. 예를 들어,
와 같은 프로그램이 이에 해당합니다.xlogo - 오류 메시지 확인: 프로그램을 커맨드 라인에서 실행하면 그래픽 메뉴에서 실행할 때는 보이지 않는 오류 메시지를 확인할 수 있습니다. 프로그램이 그래픽 메뉴에서 실행되지 않을 때, 커맨드 라인에서 실행하여 발생하는 오류 메시지를 통해 문제의 원인을 파악할 수 있습니다. 또한, 일부 그래픽 프로그램은 커맨드 라인 옵션을 통해 추가적인 기능을 제공하거나, 디버깅 정보를 출력할 수 있습니다.
'리눅스 > Part 1 - Learning The Shell' 카테고리의 다른 글
리눅스 기초 | 10-2. 프로세스 (0) | 2024.06.03 |
---|---|
리눅스 기초 | 9-2. 권한 (0) | 2024.05.30 |
리눅스 기초 | 9-1. 권한 (0) | 2024.05.29 |
리눅스 기초 | 8. 고급 키보드 트릭 (0) | 2024.05.28 |
리눅스 기초 | 7. 쉘처럼 세상 바라보기 (0) | 2024.05.24 |