Linux

Linux 프로세스(백그라운드,포그라운드)

5_jinseok12 2018. 2. 1. 14:42
728x90

프로세스
  - 커널에 관리하에 현재 시스템에서 동작중인 프로그램
    프로그램 -> 하드디스크 저장
    프로세스 -> 메모리(RAM) 저장
          운영체제의 작업 단위
  - 커널은 프로세스를 관리하기 위해서 각 프로세스에 PCB를 할당


   PCB ( Process Control Block )
   - 프로세스 고유 번호 (PID)
   - 우선 순위 (Priority)
   - 현재 상태 (Current Status)
   - 프로세스 제어하기 위한 여러 정보가 저장되어 있다.
  
 
 프로세스의 종류


  부모(Parent) 프로세스
   - 다른 프로세스를 생성하며,init 프로세스를 제외한
     모든 프로세스는 부모 프로세스를 가지고 있다,(최상위 디렉토리와 같음)


  자식(Child) 프로세스
   - 부모 프로세스의 의해 생성된 프로세스이다
   - 작업을 완료하면 결과를 부모 프로세스에게 전달을하고 종료된다.


  고아(Orphan) 프로세스
   - 자식프로세스보다 먼저 부모 프로세스가 종료됐을 때 자식 프로세스는
     고아프로세스가 되어 init 프로세스가 관리하게된다


  좀비(Zombie) 프로세스
   - 자식 프로세스의 종료 신호를 부모 프로세스가 처리하지 못할 경우
     자식 프로세스는 좀비 프로세스가 된다.
     실제로 사용되는 프로세스의 공간이 작아지기 때문에 직접 종료해야한다.


  init 프로세스
   - 부팅 시 가장 먼저 실행되어 시스템에 전반적인 설정을 초기화하는 프로세스
     모든 프로세스가 init 프로세스의 자식 프로세스가 된다.


  데몬 프로세스
   - 사용자에게 특정 기능이나 서비스를 제공하는 프로그램
     http, ftp, dns, ssh, mail...
   



   데몬의 동작 형태


    1. standalone
     - 독립적으로 메모리에 항상 상주해 있는 형태로
       리소스 소모는 많지만 응답속도가 빠른 형태이다.


    2. xinet
     - 데몬을 관리하는 데몬이라고 하여 슈퍼데몬이라고 하는
       xinetd에 의해 실행되는 형태이다.
     - 사용자의 요청이 있을 때만 실행되기 때문에
       리소스 소모는 적지만 응답속도가 느린 형태이다.
     - 예전에 하드웨어의 용량이 많지 않을 때 사용하던것.

 

#PS(Process Status)
   - 프로세스의 상태를 확인   
   -e 모든 프로세스를 리스트 형태로 출력
   -f (full format) 완벽한 형식(다양한 필드)으로 출력

 

   -a 다른 사용자들의 프로세스도 출력
   -u 사용자 이름, 시간 등 상세한 출력
   -x 현재 실행되고 있는 모든 프로세스를 출력
 
   옵션들은 크게 중요하지 않으니 차이만 알면 된다.
  

 

강제 종료: kill, killall

 

- "좀비프로세스" 같은 경우는 강제로 종료해야한다

- 프로세스를 죽이는 명령어가 아니라 신호를 발생하는 명령어이다.

- windows에서 작업관리자의 기능과 같다.

- 부모 프로세스를 없애면 자식 프로세스들은 다 없어진다.

 

 

kill -l (신호의 종류 확인)

- 앞에 SIG가 붙어있다. 9)번에 있는 SIGKILL이 신호를 강제로 종료하는 명령어이다.

- 루트 사용자일지라도 프로세스를 마음대로 종료시킬 수 없다.

 

중요한거 몇가지.

2) SIGINT  // 프로세스 종료 -> Ctrl+c

9) SIGKILL // 프로세스 종료 -> 강제

15) SIGTEAM // 프로세스 종료->기본값

 

18) SIGCONT // 프로세스 재시작

19) SIGSTOP // 프로세스 중지 -> Ctrl+z

 

 

-s sigspec | -n signum 둘중 하나만 입력하면 된다. 이름을 입력해도 되고 번호를 입력해도 된다.

 

 

ps -ef 명령어를 통해 프로세스의 모든 리스트를 출력해보자.

 

출력된 리스트 중 -bash(로그인)를 종료시켜보겠다.

부모 PID인 1293을 종료시키면 된다.

kill -9 1293 을 입력하면 자동으로 로그아웃되는것을 확인할 수 있다.

 

windows 에서의 강제종료는 작업관리자에서 할 수 있다. 리눅스의 kill 명령어와 같다.

 

 

프로세스의 종류에는 2가지가 있다

 

1) 포그라운드 프로세스(앞)

: 사용자가 입력한 명령이 실행되어 결과가 출력될 때 까지 기다려야 하는 포그라운드 방식으로 처리되는 프로세스

ex) $sleep 100

 

2) 백그라운드 프로세스(뒤)

: 명령을 실행하면 명령의 처리가 끝나는 것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 할 수 있음

ex) $sleep 100&

 

- 리눅스 : 데몬

- 윈도우즈 : 서비스

 

Ctrl + z  :  포그라운드를 백그라운드로 보내고 다시 포그라운드로 보낼 준비가 되어 있다.

& :  실행할 때 백그라운드로 실행하여 포그라운드와 백그라운드를 같이 사용할 수 있다.

jobs [%작업번호] : 백그라운드 작업을 모두 보여준다.

 

bg[%작업 번호] : 백그라운드로 전환

fg [%작업 번호] : 포그라운드로 전환

 

ping 127.0.0.1을 입력하면 계속 출력값이 나온다. Ctrl+z를 통해 백그라운드로 보낸다

 

 

같은 방법으로 3 번을 반복한다

그런 후 jobs 명령어를 통해 현재 상태를 확인해보면 3개가 실행된 것을 알 수 있다.

 

#ping 127.0.0.1 & 을 입력하면 Ctrl +c 를 눌러도 멈추지 않는다. 멈추기 위해선 kill 명령을 해주어야 한다.

 

 

위와같이 총 5개를 만들고 5번은 아직 실행중인것을 알 수 있다.

백그라운드에 있는것을 포그라운드로 끌어내고 그런 뒤에 하나씩 kill을 해줘야 한다.

 

숫자가 PID가 아닌 작업번호를 의미하는 %를 붙여 제거할 수 있다.

 

 

 

#sleep [] 는 괄호안에 입력한 숫자(초)만큼 대기하는 프로세스이다.

이러한 경우 긴 시간동안 다른 명령어를 실행할 수 없기 때문에 다른 프로세스를 실행하려면

아래 사진처럼 프로세스를 중지시키거나 다른 shell을 실행시키면 된다.

 

 

세션 1에서 위와 같이 입력한다.

 

세션 2에서 #pstree를 입력하여 세션1에서 동작하고 있는 프로세스를 트리구조 형태로 출력하여

부모/자식 관계를 직관적으로 확인할 수 있다.

 

이름이 동일한 프로세스를 한번에 종료하고 싶을 땐 위와 같이 #pkill [프로세스] 를 입력하면 된다.

 

 

 

 

/proc/meminfo - 메모리 정보
/proc/cpuinfo - CPU정보
/proc/version - 커널 정보

 

 

#uptime
 13:03:39 up  1:22,       3 users,  load average: 0.00, 0.00, 0.00
 [현재 시간] [부팅시간]  [접속자수]  [평균 부하 최근 5분 10분 15분]


 CPU코어 1개 -> 부하 1.0 -> CPU %100 사용중 (정상적인 상태)
                   -> 부하 2.0 -> CPU %100 사용중 (대기하고 있는 프로세스 1개)
  
             2개 -> 부하 1.0 -> CPU %50 사용중


 

 

 

반응형

'Linux' 카테고리의 다른 글

Linux 파일 시스템  (0) 2018.02.05
Linux 예약 작업  (2) 2018.02.02
Linux 패스워드 정책  (0) 2018.01.31
Linux (ACL , sudo)  (0) 2018.01.30
Linux 권한(속성)  (0) 2018.01.29