[CORE-006][기초] 프로그램·프로세스·서비스 쉽게 구분하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CORE-006][기초] 프로그램·프로세스·서비스 쉽게 구분하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 200회 작성일 26-09-01 14:35

본문

[이번 수업]

프로그램 파일을 실행하면 프로세스가 되고, 운영체제가 장기 작업을 서비스로 관리하는 흐름을 직접 확인합니다.

[선수지식]

CORE-003의 CPU·메모리·저장장치와 CORE-005의 파일·경로를 알면 좋습니다.

[학습목표]

1. 프로그램·프로세스·서비스를 구분한다.
2. PID와 부모·자식 프로세스를 설명한다.
3. 운영체제별로 프로세스와 서비스 상태를 읽는다.

[핵심개념]

프로그램은 정해진 일을 하도록 준비한 명령의 묶음입니다. 실행 파일이나 스크립트로 저장장치에 놓이며, 실행 전에는 CPU 시간을 사용하지 않습니다.

프로세스는 실행 중인 프로그램의 한 인스턴스입니다. 운영체제는 각 프로세스에 PID(Process ID, 프로세스 식별 번호)를 주고 메모리, 실행 상태, 열린 파일, 사용자 권한 같은 정보를 관리합니다. 같은 프로그램에서 여러 프로세스가 생길 수 있고, 만든 쪽은 부모, 만들어진 쪽은 자식입니다. 종료되면 메모리와 자원이 정리되고 PID도 나중에 재사용될 수 있습니다.

서비스는 사용자 창을 직접 조작하지 않아도 기능을 제공하는 장기 작업과 그 관리 설정을 뜻합니다. 부팅 때, 요청이 들어올 때, 일정에 따라 시작할 수 있고 실패 시 재시작하거나 의존 관계와 실행 계정을 지정할 수 있습니다. 서비스가 실행 중일 때 실제 코드는 하나 이상의 프로세스가 수행합니다. 따라서 프로그램은 저장된 재료, 프로세스는 실행 중인 일꾼, 서비스는 일꾼을 운영체제가 관리하는 업무라고 비유할 수 있습니다.

서비스 관리 도구는 운영체제마다 다릅니다. Windows는 서비스 관리자를, macOS는 launchd를, 많은 Linux 환경은 systemd를 사용합니다. 서비스는 중지 상태이거나 요청 때만 프로세스를 시작할 수 있어 “서비스 하나는 늘 프로세스 하나”라고 단정하면 안 됩니다.

[따라하기]

다음 내용을 process_demo.py로 저장합니다. 현재 Python 프로세스가 같은 Python 프로그램으로 자식 프로세스를 하나 만드는 예제입니다.

```python
import os
import subprocess
import sys

child = subprocess.Popen([
    sys.executable,
    "-c",
    "import time; time.sleep(0.2)",
])
print("program:", sys.executable)
print("parent PID:", os.getpid())
print("child PID:", child.pid)
child.wait()
print("child exit:", child.returncode)
```

macOS·Linux는 `python3 process_demo.py`, Windows는 `py process_demo.py`로 실행합니다. 경로와 PID는 컴퓨터마다 다르지만 형태는 다음과 같습니다.

```text
program: ...python...
parent PID: 1234
child PID: 1235
child exit: 0
```

부모와 자식 PID가 다르고 종료 코드 0은 자식이 정상 종료했다는 뜻입니다. 서비스 목록은 읽기 전용 명령으로 확인할 수 있습니다.

- Windows PowerShell: `Get-Service | Select-Object -First 5 Status, Name`
- macOS: `launchctl list | head -n 5`
- Linux(systemd): `systemctl list-units --type=service --state=running --no-pager | head -n 5`

[흔한 실수]

- 프로그램 파일과 실행 중인 프로세스를 같은 것으로 생각합니다.
- 창이 없으면 프로세스가 없다고 생각합니다. 백그라운드 프로세스도 CPU와 메모리를 사용합니다.
- PID를 프로그램의 영구 번호로 저장합니다. PID는 종료 뒤 재사용될 수 있습니다.
- 서비스 문제에서 프로세스만 다시 실행하고 관리 설정·권한·로그를 확인하지 않습니다.

[보안 주의]

이름을 모르는 시스템 프로세스나 서비스를 임의로 종료하지 마세요. 상태 조회는 일반 권한으로 하고 변경이 필요하면 대상과 영향을 먼저 확인합니다. 서비스는 전용 계정과 최소 권한으로 실행하고 실행 파일·설정은 신뢰되지 않은 사용자가 바꾸지 못하게 보호하세요. 예제처럼 외부 명령 인수는 목록으로 전달하고, 신뢰할 수 없는 입력을 셸 명령 문자열에 붙이지 않습니다.

[직접 해볼 과제]

1. 예제를 동시에 두 번 실행해 같은 프로그램 경로에서 서로 다른 PID가 생기는지 기록하세요.
2. 운영체제의 서비스 목록에서 하나를 골라 이름, 상태, 실제 프로세스 유무를 읽기 전용으로 조사하세요.

[확인문제]

1. 같은 프로그램을 두 번 실행하면 프로세스는 몇 개가 될 수 있나요?
2. 서비스가 등록돼 있어도 프로세스가 없을 수 있는 이유는 무엇인가요?
3. PID를 프로그램의 영구 식별자로 쓰면 안 되는 이유는 무엇인가요?

[다음 학습]

CORE-007에서는 운영체제가 제공하는 기능과 애플리케이션이 담당하는 기능의 경계를 배웁니다.

[공식 참고 자료]

- POSIX.1-2024 정의: https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap03.html
- Python subprocess 공식 문서: https://docs.python.org/3/library/subprocess.html
- Windows 서비스 공식 문서: https://learn.microsoft.com/en-us/windows/win32/services/services
- macOS Service Management: https://developer.apple.com/documentation/servicemanagement
- systemd.service 공식 문서: https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
777
어제
5,103
최대
16,772
전체
771,831
Copyright © 소유하신 도메인. All rights reserved.