[실습] 프로세스
필기자
2023-03-27 18:14
3,458
0
본문
프로세스
- 현재 시스템에서 실행 중인 프로그램
- 리눅스는 다중 프로세스 시스템으로 동시에 여러 프로세스 실행
프로세스의 부모-자식 관계
- 리눅스에서 모든 프로세스는 부모-자식 관계가 있음
- 부모프로세스가 자식프로세스 생성
프로세스 번호
- 각 프로세스는 고유한 번호를 가짐: PID
- 1번 프로세스는 system, 2번 프로세스는 kthreadd
프로세스의 종류
- 데몬 프로세스: 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행
- 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
- 좀비 프로세스
- 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식 프로세스를 좀비 프로세스라고 함
- 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함
- 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음
user1@myubuntu:~$ ps
PID TTY TIME CMD
3904 pts/0 00:00:00 sh
3909 pts/0 00:00:00 bash
4965 pts/0 00:00:00 ps
user1@myubuntu:~$ ps -f
UID PID PPID C STIME TTY TIME CMD
user1 3904 3878 0 16:49 pts/0 00:00:00 sh
user1 3909 3904 0 16:49 pts/0 00:00:00 bash
user1 4970 3909 0 18:03 pts/0 00:00:00 ps -f
user1@myubuntu:~$ ps a
PID TTY STAT TIME COMMAND
1957 tty2 Ssl+ 0:00 /usr/libexec/gdm-wayland-session env GNOME_SHELL_SE
1960 tty2 S+ 0:00 -/bin/sh -c /usr/bin/gnome-session -l --session=ubu
1988 tty2 Sl+ 0:00 /usr/libexec/gnome-session-binary --session=ubuntu
3904 pts/0 Ss 0:00 sh
3909 pts/0 S 0:00 bash
4971 pts/0 R+ 0:00 ps a
user1@myubuntu:~$ ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user1 1957 0.0 0.1 163880 6188 tty2 Ssl+ 16:48 0:00 /usr/libexec/
user1 1960 0.0 0.0 2888 1868 tty2 S+ 16:48 0:00 -/bin/sh -c /
user1 1988 0.0 0.3 224524 15368 tty2 Sl+ 16:48 0:00 /usr/libexec/
user1 3904 0.0 0.0 2888 964 pts/0 Ss 16:49 0:00 sh
user1 3909 0.0 0.1 12744 5508 pts/0 S 16:49 0:00 bash
user1 4972 0.0 0.0 13984 1560 pts/0 R+ 18:04 0:00 ps au
nano zombie.py
import os
import time
pid = os.fork()
if pid > 0:
# 부모 프로세스는 즉시 종료되지 않고, 자식 프로세스를 좀비 상태로 남깁니다.
print(f"I'm the parent process and my child is {pid}.")
time.sleep(60) # 부모 프로세스가 살아있는 동안 자식 프로세스를 좀비 상태로 확인할 수 있습니다.
else:
# 자식 프로세스는 즉시 종료됩니다.
print("I'm the child process and I'm about to exit.")
os._exit(0)
댓글목록0