Unix / Linux - 프로세스 관리
안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 Unix/Linux 프로세스의 세계로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 기본 개념을 안내해드리는 것을 기쁘게 생각합니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 우리는 기본부터 시작하여 점진적으로 올라갈 것입니다. 그러니 커피(또는 차, 당신이 좋아하는 것이라면)를 한 잔 마시고, 같이 뛰어들어 보겠습니다!
프로세스는 무엇인가요?
시작하기 전에 프로세스가 무엇인지 이해해 보겠습니다. 활기찬 주방을 상상해 보세요. 각 요리사가 특정 요리를 맡고 있는 것은 프로세스라고 생각할 수 있습니다. 그들은 자신만의 재료(리소스), 레시피(프로그램), 그리고 목표(출력)을 가지고 있습니다. 컴퓨터 세계에서 프로세스는 단순히 실행 중인 프로그램입니다.
프로세스 시작하기
Unix/Linux에서 프로세스를 시작하는 것은 쉽기 그 자체입니다! 두 가지 주요 방법으로 할 수 있습니다:
- 전면 프로세스: 명령어를 입력하고 Enter 키를 누릅니다.
- 배후 프로세스: 명령어 끝에 앰퍼샌드(&)를 추가합니다.
다음은 몇 가지 예제입니다:
# 전면 프로세스
$ ls -l
# 배후 프로세스
$ long_running_command &
첫 번째 예제에서 ls -l
은 전면에서 실행되어 디렉토리 내용을 보여줍니다. 두 번째 예제에서는 명령어가 배후에서 실행되어 터미널을 계속 사용할 수 있습니다.
실행 중인 프로세스 목록 보기
이제 주방(시스템)에서 일하고 있는 모든 요리사(프로세스)를 보고 싶다면 어떻게 하죠? 이때 ps
명령어가 유용합니다!
$ ps aux
이 명령어는 실행 중인 모든 프로세스를 보여줍니다. 주방의 모든 구석을 들여다보는 것과 같습니다!
다음은 볼 수 있는 내용의 분해입니다:
열 | 설명 |
---|---|
USER | 프로세스 소유자 |
PID | 프로세스 ID |
%CPU | CPU 사용량 |
%MEM | 메모리 사용량 |
VSZ | 가상 메모리 크기 |
RSS | 주거 세트 크기 |
TTY | 터미널 유형 |
STAT | 프로세스 상태 |
START | 시작 시간 |
TIME | CPU 시간 |
COMMAND | 명령어 이름 |
프로세스 중지하기
때로는 프로세스가 나쁜 일을 하고 있을 때가 있습니다(요리사가 모든 것을 태울 때처럼). 이러한 경우 프로세스를 중지해야 합니다. 다음은 방법입니다:
$ kill PID
PID를 종료하고 싶은 프로세스 ID로 대체합니다. 특히 강력한 중지를 원한다면 다음을 사용할 수 있습니다:
$ kill -9 PID
이는 요리사를 즉시 해고하는 것과 같습니다 - 강제 중지입니다!
부모 및 자식 프로세스
Unix/Linux에서 프로세스는 가족 트리를 가지고 있습니다. 프로세스가 다른 프로세스를 생성하면, 그것은 부모가 되고, 새로운 프로세스는 자식이 됩니다. 요리사(부모 프로세스)가 조리보조(자식 프로세스)에게 작업을 지정하는 것과 같습니다.
이 관계를 보기 위해 다음을 사용할 수 있습니다:
$ pstree
이 명령어는 프로세스 트리를 보여주며, 부모-자식 관계를 설명합니다.
僵尸 프로세스와 고아 프로세스
이제 특별한 유형의 프로세스에 대해 이야기해 보겠습니다:
1.僵尸 프로세스: 실행이 완료되었지만 프로세스 테이블에 여전히 기록이 남아 있는 자식 프로세스. 요리사가 요리를 완료했지만 아직 퇴근하지 않은 것과 같습니다. 2. 고아 프로세스: 부모가 완료되었거나 종료되었지만 여전히 실행 중인 프로세스. 상급 요리사가 집에 가고 나서도 여전히 일하고 있는 조리보조와 같습니다.
이제僵尸 프로세스가 있는지 확인하려면 다음을 사용할 수 있습니다:
$ ps aux | grep Z
데몬 프로세스
데몬 프로세스는 주방 직원처럼 24/7 일하는 것입니다. 그들은 배후에서 실행되며 다양한 서비스를 제공합니다. 예를 들어, sshd
데몬은 들어오는 SSH 연결을 듣습니다.
모든 데몬 프로세스를 목록에 올리려면 다음을 사용할 수 있습니다:
$ ps -eo 'tty,pid,comm' | grep ^?
top 명령어
top
명령어는 모든 것이 포함된 주방 모니터입니다. 그것은 실행 중인 시스템에 대한 동적 실시간 뷰를 제공합니다. 다음은 사용 방법입니다:
$ top
ps
와 유사한 표를 보게 됩니다만, 실시간으로 업데이트됩니다. 주방의 라이브 피드와 같습니다!
작업 ID 대 Process ID
마지막으로, 작업 ID와 프로세스 ID의 차이를 명확히 하겠습니다:
- Process ID (PID): 시스템 내 각 프로세스에 대한 고유 식별자.
- Job ID: 셸에서 배후에서 시작된 프로세스에 할당된 번호.
작업 ID를 보려면 다음을 사용할 수 있습니다:
$ jobs
배후 작업을 전면으로 가져오려면 다음을 사용할 수 있습니다:
$ fg %job_id
Job IDs는 현재 셸 세션에 특정하며, PIDs는 시스템 전체에 적용됩니다.
이제 여러분은 Unix/Linux 프로세스 관리의 기본을 다루었습니다. 실습이 완벽함을 기억하며, 시스템에서 이 명령어를 시도하지 마세요. kill
명령어는 신중하게 사용해야 합니다 - 주방에서 실수로 종료하는 일이 없도록!
마무리하면서, 제가 교사로서 겪은 유머러스한 사건을 떠올립니다. 제가 kill
명령어를 시연하다가 실수로 텍스트 편집기 프로세스를 종료하여 1시간 분의 작업을 잃은 적이 있습니다. 이 교훈을 기억하세요 - 프로세스를 놀리기 전에 항상 작업을 저장하세요!
프로세스를 계속 요리하고, 즐거운 컴퓨팅을 기원합니다!
Credits: Image by storyset