Unix / Linux - 프로세스 관리

안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 Unix/Linux 프로세스의 세계로 흥미로운 여정을 떠납니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 이 기본 개념을 안내해드리는 것을 기쁘게 생각합니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 우리는 기본부터 시작하여 점진적으로 올라갈 것입니다. 그러니 커피(또는 차, 당신이 좋아하는 것이라면)를 한 잔 마시고, 같이 뛰어들어 보겠습니다!

Unix / Linux - Processes

프로세스는 무엇인가요?

시작하기 전에 프로세스가 무엇인지 이해해 보겠습니다. 활기찬 주방을 상상해 보세요. 각 요리사가 특정 요리를 맡고 있는 것은 프로세스라고 생각할 수 있습니다. 그들은 자신만의 재료(리소스), 레시피(프로그램), 그리고 목표(출력)을 가지고 있습니다. 컴퓨터 세계에서 프로세스는 단순히 실행 중인 프로그램입니다.

프로세스 시작하기

Unix/Linux에서 프로세스를 시작하는 것은 쉽기 그 자체입니다! 두 가지 주요 방법으로 할 수 있습니다:

  1. 전면 프로세스: 명령어를 입력하고 Enter 키를 누릅니다.
  2. 배후 프로세스: 명령어 끝에 앰퍼샌드(&)를 추가합니다.

다음은 몇 가지 예제입니다:

# 전면 프로세스
$ 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