프로세스와 시그널

  • 프로세스란?
    • 사전적 의미 : 실행중인 프로그램
    • 프로그램은 하드디스크에 저장된 실행 파일 자체
    • 프로그램이 실행되면 프로세스가 생성됨
    • 프로세스는 메모리 상에 있는 객체임
    • CPU가 메모리에 올라와 있는 프로세스를 실행해준다.
    • CPU가 프로세스를 실행하기 위해선 정보가 필요하다.
      • 프로그램의 코드, 프로세스의 stack, heap....

프로세스 계층구조

  • PID (Process ID) : 프로세스의 ID 값 (고유값)
  • 부모 프로세스와 자식 프로세스
    • 프로세스가 새로운 프로세스를 발생시키면 부모-자식 관계가 생성됨
    • init 프로세스를 제외하고 모든 프로세스들은 부모 프로세스가 존재함
  • init 프로세스 : 커널이 부팅을 하며 하드웨어 자원들을 초기화 후 init 프로세스를 생성함
    • init 프로세스의 PID는 항상 1이다.
  • 프로세스 종료처리
    • 자식 프로세스가 종료될 때 메모리 clear가 제대로 되지 않아서 부모 프로세스 쪽에서 이 처리를 도와줘야함
    • 이 과정이 프로세스 종료처리이다.
  • 고아 프로세스와 좀비 프로세스
    • 종료처리가 제대로 이루어지지 않았을 때 발생하는 문제
    • 고아 프로세스 : 자식 프로세스 입장에서 부모 프로세스가 먼저 종료되어 버리는 경우
      • 자식 프로세스가 종료 될 때, 부모가 없기 때문에 종료처리가 되지 않음
      • 만약 부모 프로세스가 먼저 죽게되면 리눅스는 입양처리가 이루어짐
      • 부모 프로세스를 init 프로세스로 바꿔줌
    • 좀비 프로세스 : 자식 프로세스가 종료가 되었는데 종료처리를 진행하고있지 않는것
      • 부모 프로세스는 자식 프로세스가 죽을때까지 대기 하다가 종료처리를 하거나
      • 자식 프로세스가 죽으면 운영체제가 부모 프로세스에게 자식이 죽었다는 signal을 날려주면 종료처리를 진행함
      • 만약 부모 프로세스가 다른 처리를 하느라 종료 처리를 못하면 좀비 프로세스가 됨

프로세스 종료 상태 (exit status)

  • 프로세스 종료 상태란?
    • 프로세스가 종료될 때 넘겨주는 정보
    • 자식 프로세스가 죽을 때 상태를 남기고, 부모 프로세스가 받아옴
  • 상태 정보
    • 정상 종료 여부
    • 시그널을 받아 종료되었는지 여부 및 시그널의 종류
    • 코어 덤프(core dump)를 생성했는지 여부
      • 코어 덤프 = 메모리 덤프 = 시스템 덤프 = 덤프보통 프로세스가 비정상적으로 종료했을 때 만들어짐
      • 디버깅 툴로 core file을 통해 분석함
      • 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록 한 것 (core file을 만들어내는 행위)

표준 스트림 (standard streams)

  • 표준 스트림은 입출력 통로를 가리킴
  • 모든 프로세스는 다음의 세가지 스트림을 가지고 생성됨
    • 표준 입력 (standard input), stdin, 0
    • 표준 출력 (standard output), stdout, 1
    • 표준 에러 (standard error), stderr, 2
  • 프로세스가 스트림을 열게 되면 스트림 별로 identifier가 생성됨
    • 리눅스에는 번호로 부여됨

파일 디스크립터 (file descriptor, FD)

  • 파일을 대변하는 객체
  • 파일에 대한 작업(read, write)을 하기 위해서는 파일 디스크립터를 열어야 함
  • 프로세스로 ''열린 파일 디스크립터'' 목록을 관리
  • 어떤 프로세스가 특정 파일, 혹은 파일들을 열어야 할 때 각각의 파일을 대표하는 정수
    • FD 의 0~2 값은 고정되어 있음
    • 입력(0), 출력(1), 에러(2)

포어 그라운드 프로세스, 백그라운드 프로세스

  • foreground process
    • 쉘의 표준 입력(stdin)이 연결된 프로세스
    • 표준 출력(stdout)과 표준 에러(stderr)도 쉘과 연결되어 있음
  • background process
    • 쉘의 표준 입력이 연결되지 않은 프로세스
    • 표준 출력과 표준 에러는 쉘과 연결되어 있음

데몬 프로세스 (daemon process)

  • 왜 악마 프로세스인가?
    • 보이지 않는 곳에서 어떤 일을 한다는 의미에서 따옴
  • 데몬 프로세스란?
    • 백그라운드 프로세스로 동작하기 위해 만들어진 프로세스
    • 표준 스트림을 갖고 시작하지만 모두 닫아버림 -> 쉘과의 입출력 교환 불가
    • 부모 프로세스를 init 프로세스로 변경

시그널 (signal)

  • 비동기 이벤트를 처리하기 위한 IPC (프로세스간 통신)

번호시그널 이름발생 및 용도디폴트 action리눅스 버전

1 SIGHUP(HUP) hangup 시그널; 전화선 끊어짐 종료 POSIX
2 SIGINT(INT) interrupt 시그널; Ctrl + c ;실행을중지 종료 ANSI
3 SIGQUIT(QUIT) quit 시그널; Ctrl + \ 종료(코어덤프) POSIX
4 SIGILL(ILL) 잘못된 명령   ANSI
5 SIGTRAP(TRAP) 트렙 추적   POSIX
6 SIGIOT(IOT) IOT 명령   4.2 BSD
7 SIGBUS(BUS) 버스 에러   4.2 BSD
8 SIGFPE(FPE) 부동 소수점 에러 종료 ANSI
9 SIGKILL(KILL) 무조건적으로 즉시 중지한다. 종료 POSIX
10 SIGUSR1(USR1) 사용자 정의 시그널1 종료 POSIX
11 SIGSEGV(SEGV) 세그멘테이션 위반   ANSI
12 SIGUSR2(USR2) 사용자 정의 시그널2 종료 POSIX
13 SIGPIPE(PIPE) 읽으려는 프로세스가 없는데 파이프에 쓰려고 함 종료 POSIX
14 SIGALRM(ALRM) 경보(alarm) 시그널; alarm(n)에 의해 n초 후 생성됨 종료 POSIX
15 SIGTERM(TERM) 일반적으로 kill 시그널이 전송되기 전에 전송된다. 잡히는 시그널이기 때문에 종료되는 것을 트랙할 수 있다. 종료 ANSI
16 SIGTKFLT 코프로세서 스택 실패    
17 SIGCHLD(CHLD) 프로세스 종료시 그 부모 프로세스에게 보내지는 시그널 무시 POSIX
18 SIGCONT(CONT) STOP 시그널 이후 계속 진행할 때 사용. ; 정지 되지 않은 경우 무시됨   POSIX
19 SIGSTOP(STOP) 정지 시그널; SIGSTP과 같으나 잡거나 무시할 수 없음 프로세스 정지 POSIX
20 SIGTSTP(TSTP) 키보드에 의해 발생하는 시그널로 Ctrl+Z로 생성된다. ; 터미널 정지 문자 프로세스 정지 POSIX
21 SIGTTIN 백그라운드에서의 제어터미널 읽기 프로세스 정지 POSIX
22 SIGTTOU 백그라운드에서의 제어터미널 쓰기 프로세스 정지 POSIX
23 SIGURG 소켓에서의 긴급한 상태   4.2 BSD
24 SIGXCPU CPU 시간 제한 초과 setrlimit(2) 메뉴얼 패이지 참조   4.2 BSD
25 SIGXFSZ 파일 크기제한 초과 setrlimit(2) 메뉴얼 패이지 참조   4.2 BSD
26 SIGVTALRM 가상 시간 경고 setitimer(2) 메뉴얼 패이지 참조   4.2 BSD
27 SIGPROF 프로파일링 타이머 경고. setitimer(2) 메뉴얼 페이지 참조   4.2 BSD
28 SIGWINCH 윈도우 사이즈 변경   4.3 BSD, Sun
29 SIGIO 기술자에서 입출력이 가능함. fcntl(2) 메뉴얼 참조   4.2 BSD
30 SIGPWR 전원 실패   System V
31 UNUSED 사용 안함    

'skill > linux' 카테고리의 다른 글

[Linux] 파일  (0) 2023.03.07
[Linux] 기본 명령어  (0) 2023.03.05
[Linux] 리눅스란?  (0) 2023.03.03

+ Recent posts