프로세스 > 우분투 리눅스

본문 바로가기

[실습] 프로세스

필기자
2023-03-27 18:14 3,590 0

본문

프로세스

  • 현재 시스템에서 실행 중인 프로그램
  • 리눅스는 다중 프로세스 시스템으로 동시에 여러 프로세스 실행

프로세스의 부모-자식 관계

  • 리눅스에서 모든 프로세스는 부모-자식 관계가 있음
  • 부모프로세스가 자식프로세스 생성

 

20230327180022_d7869b5d490f20fdf5857aef3f2c6e00_t0yr.png

 

프로세스 번호

  • 각 프로세스는 고유한 번호를 가짐: PID
  • 1번 프로세스는 system, 2번 프로세스는 kthreadd

프로세스의 종류

  • 데몬 프로세스: 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행
  • 고아 프로세스: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로세스는 고아 프로세스가 됨
  • 좀비 프로세스
    1. 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식 프로세스를 좀비 프로세스라고 함
    2. 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함
    3. 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음

 



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

등록된 댓글이 없습니다.
게시판 전체검색