[Linux] 프로세스 종류 , 명령어

 프로세스



리눅스의 프로세스 

  • 하드에 저장된 실행코드가 메모리에 올라(load) 작동 중(활성화)인 프로그램
  • 예를 들어 게임을 구동할 때 아이콘을 더블클릭하면 하드에 저장된 파일을 불러오며 화면에 loading....이 나오다가 게임이 켜지는 것을 볼 수 있다.
  • 포그라운드 프로세스(FP) : 파워포인트, 크롬, 게임프로그램 -> 화면에 띄어져서 사용자가 직접 구동
  • 백그라운드 프로세스(BP) : 알약, 네트워크, 파일저장소관리, HTTP, DNS 운영체제가 알아서 구동
  • 프로세스 번호 : 메모리에 로딩되어 활성화된 프로세스를 관리하는 번호 (임의로 배정) -> 강제 종료 시 활용
  • 작업번호 : 현재 실행되는 백그라운드 프로세스의 순차 번호(jobs)
  • 부모 프로세스 / 자식 프로세스 : 만약에 파이어 폭스를 실행하기 위해서는 X-windows가 실행 되야 파이어 폭스가 실행된다.
    • X-windows : 부모프로세스
    • 파이어 폭스 : 자식 프로세스

프로세스 관련 명령어

  • ps (Process State) : 현재 프로세스 상태를 확인

    • 옵션

      • ps –ef | grep 필터

    • 유닉스계열 : ps -elf

    • BSD계열 : ps aux




  • kill : 응답없거나 필요없는 프로세스를 강제로 종료 

    • kill -9 프로세스 번호 : 무조건 종료

  • pstree : 부모/자식 프로세스 관계를 보여준다.

    •  pstree –h : 실행 명령어 진하게 보여준다.

    • pstree -a : 명령 행 인자(옵션)까지 보인다.











ps aux

  • USER : 프로세스 구동한 사용자
  • PID : 프로세스 번호
  • %CPU : CPU 사용률
  • %MEM : 메모리 사용률
  • RSS : 프로세스가 사용중인 물리적 메모리 크기
  • TTY : 사용중인 터미널 
  • STIME(START) : 프로세스 시작 시간
  • TIME : 실행시간
  • COMMAND(CMD) : 명령어(프로그램 이름)










좀비 프로세스 발견 법

  • 컴퓨터를 사용하다 보면 죽지 않는 프로세스를 좀비 프로세스라고 부른다. 이것은 수시로 발견해서 kill -9으로 강제 종료를 시켜야 한다.

    • 좀비 프로세서는 프로그램을 구동 중에 강제로 종료 하던지 / 인터넷을 하다가 웹페이지를 강제로 종료하면 자주 생긴다.

    • awk : 특정 문자열 추출 (파라미터)

      • $2 -> 2번째 필드값

      • == “Z” -> 대문자Z를 찾아라

      • {pinrt $0} -> 파라미터를 출력해라



kill -9 

  • yes > /dev/null : null 장치에 yes를 넣어라(무한루프)
  • ps –elf | grep yes : yes 필터링 해서 프로세스 자세히 출력 -> pid 보인다.
  • kill -9 pid : 죽었음... (포그라운드에서 강제 종료 : 컨트롤 + c)



killall -옵션 name

  • 프로세스 번호가 아닌 이름으로 프로세스를 종료
  • -I : 대소문자 구분 없이 프로세스 이름 일치 
  • -g : 프로세스 그룹 
  • -y : 지정된 시간 보다 이전 프로세스 종료시간을 본다 
  • -o : 지정된 시간 보다 이후 프로세스 종료시간을 본다 
  •  -i : 종료전에 확인 요구
  •  -ㅣ: list(모든 알려진 시그널 이름
  • -v : 시그널이 성공적으로 전송될경우 보고 
  • -w : 프로세스 종료 될때 까지 대기




시그널 (signal)

  • 프로세스에게 어떤 이벤트의 발생을 알리기 위해 전달되는 소프트웨어 인터럽트 

  • kill -l

    • 1 : Hangup : HUP (접속이 끊겼을때 / 로그아웃 )

    • 2 : INT(키보드로부터 오는 인터럽트 시그널 중지)

      • ctrl-c

    • 3 : QUIT(실행중지)

      • CTRL-\

    • 9 : KILL (강제 종료)

    • 15 : TERM(Terminate) : 정상 종료 

    • 18 : Cont(Continue) : STOP을 다시 진행한다.

    • 19 : STOP : 정지 시그널 

    • 20 : TSTOP : 실행 정지(suspend) 후 다시 실행 (포그라운드를 백그라운드로 전환 )

      • ctrl + z  














전부 외울 필요 없고 표시한 부분 정도만 암기 해 두자

top : 실시간으로 ps 확인 

  • 항목의 의미

    • PID : 프로세스 ID / USER : 사용자 /PR : 우선순위 / NI :nice값 /VIRT :가상메모리 크기 /RES : 실제 메모리 크기 /%cpu : cpu 사용률 / %mem 메모리 사용률

  • 옵션 : h (도움말)

    • Enter/Spacebar : 갱신 일시 중지(즉시 다시 출력)

    • u : 사용자 별로 출력 (사용자 필터)

    • M :메모리별 정렬 /p: cpu용량 정렬 / k : 프로세스 종료


ni값 (nice)
  • 프로세스의 우선순위 값을 의미한다.

  • 기본적으로 0값을 갖는다. (사용자가 설정)

  • -20 ~ 19까지 값을 변경할 수 있으며 작을 수록 우선권을 갖는다.

  • root 사용자는 ni값을 증감이 가능

    • (감소 : 우선순위를 증가 / 증가 : 우선순위를 감소)

  • 일반 사용자는 ni값을 증가만 가능 

    • 증가 : 우선순위를 감소 (뒤로 미는)

  • renice

    • 주로 pid를 활용해서 우선순위를 조절을 한다 

    • 기존 값을 무시하고 적용이 된다 

    • -20 ~10 까지 사용

    • root 사용자만 증감 가능 / 일반사용자는 우선순위(값은 증가)감소만 가능하다


서비스 / 소켓

  • 서비스 : 데몬이라고 부르는 프로세스로 컴퓨터가 켜져있는 동안에 24시간 지속적으로 활동하고 있는 프로세스 (network / httpd / named) => standalone 방식 

  • 소켓 : 접속하려고 할 때 구동되는 프로세스로 예를 들어 ftp서비스를 자주 사용되지 않는데 누군가가 접속을 했을 때만 구동하도록 셋팅 할 수 있다. (리소스 낭비를 최소화 한다) 

    • 과거에는 inet / xinetd 라고 부름

  • 하나의 프로세스가 다른 프로세스를 실행하기 위한 방법

    • fork  : 리눅스 부팅시 발생하는 데몬 프로세스 / 새로운 프로세스를 위해 메모리를 할당 받아 복사본 형태의 프로세스를 실행하는 형태로 기존 프로세스는 그대로 실행되어 있다.

exec : 원래 프로세스를 새로운 프로세스로 대체하는 형태로 호출 / 덮어 씌워 버림

서비스

  • 시스템과 독자적으로 구동 및 제공되는 프로세스 

    • 웹서비스 httpd / DB : mariad /ftp : vsftpd

  • 실행 및 종료 

    • systemctl start /stop /restart 서비스 이름 

  • 서비스 스크립트 파일 

    • /usr/lib/system/system/*.service 파일로 존재 

  • 부팅시 자동 실행 (enable) 

    • 확인법 :systemctl list-unit-files


소켓

  • 서비스는 항상 가동 중 !

  • 소켓은 외부에서 특정 서비스를 요청시에만  system 에서 구동을 진행한다 

    • 그리고 요청이 끝나면 소켓도 종료됨

  • 소켓은 접속시 로깅이 좀 길고 사용자 입장에서는 느리다라는 느낌을 받을 수 있지만 항상 가동 하지 않기 때문에 리소스는 여유 있게 구동한다.

    • 왜냐하면  system 가 서비스를 새로 구동하는 시간이 소요된다 (telnet/ftp)

  • 소켓과 관련된 파일은 서비스와 동일 

    • 대신 확장자가 *.socket


nohup : 로그아웃 해도 백그라운드 작업 계속 .

  • 시스템 업데이트를 진행하는데 시간이 너무 많이걸려 로그오프가 되어도 업데이트를 해야 되는 경우가 많다. -> nohup

  • 명령어 뒤에 & 표시를 하면 백그라운드로 실행해라.


백그라운드 / 포그라운드

  • 명령어 뒤에 &를 붙이면 백그라운드로 작업한다.

  • 백그라운드로 작업하면 작업 번호가 보인다.

  • bg : 백그라운드 작업을 볼 수 있다.

  • jobs : 백그라운드 작업 중 순서를 볼 수 있다.

    • 실습 예제 : yes 무한루프를 백그라운드로 실행 -> gedit & 

      • 2개의 백그라운드 작업

      • gedit를 포그라운드로 실행 : fg 2 -> gedit 종료

      • yes 무한 루프를 포그라운드로 실행 : fg 1 -> 일시정지 (ctrl + z)

      • yes 무한 루프를 백그라운드로 실행 : bg 1 -> jobs 확인

  • 실무예제 : 압축을 하거나 압축을 풀때 시간이 오래 걸리는 파일에 대한 백그라운드 실행을 진행 해보자. -> dnf -y update &