[Linux] process

:)·2024년 4월 27일
0

Linux

목록 보기
10/17
post-thumbnail

process

  • 프로그램이 동작하고 있는 과정 ( 프로그램 => binary 실행 계획 )

    • 명령어 - ps : PID ==> process ID (프로그램 순서 번호) (자식 프로세스)
  • 프로세스는 종료가 되면 가장 뒤에 있는 PID번호를 다시 부여

  • process 종류

    • foreground TUI 환경
      • 선행 프로세스가 종료한 뒤에 다음 프로세스 실행
    • background GUI 환경 서비스(데몬)
      • 프로세스 중에 쉘 전환을 하여 다른 프로세스 실행 가능
      • 명령어 뒤에 &
    • foreground/background 프로세스 실행 확인
  • 명령 시그널

    • jobs 작업 중인 동작 확인
    • ctrl + z 동작 정지
    • ctrl + c 동작 취소
    • ctrl + d 동작 종료
    • fg 포어그라운드 프로세스
    • bg 백그라운드 프로세스
  • 사용법 (기본값)

    • 명령어 실행
    • 변환 : fg or fg %[번호]
    • 종료 : kill %[작업 번호]
  • background process (GUI)
    • 프로세스 실행 후 쉘 전환 다음 실행
    • 사용법: 명령어 뒤에 &
      • 명령어 실행 &

      • 변환 : bg or bg %작업번호

      • 종료 : kill %[번호]

        • &가 붙어있음 = bg →멈출 수 없음
        • 안 붙어있음 =fg → 멈추기 가능

daemon=service

  • 서버 프로세스, 시스템이 살아 있는 동안 항상 실행되는 백그라운드 프로세스 상태로 존재
  • 시스템에서 네트워크를 통해 특정한 서비스를 제공하기 위해 특정 포트를 열어두고 연결 요청이 들어오길 기다리는 프로그램
  • 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램
  • 데몬은 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 1이며, 따라서 프로세스 트리에서 init 바로 아래에 위치
  • systemdsyslogdhttpdsshdnamed

스케줄링

  • 예약 프로세스
    • at 한번만 실행
    • cron 주기적으로 실행
      • at 00:00 + 숫자 day
      • minutes / hours / weeks
      • 보통 at [시간]:[분] 로 많이줌
      • 설정 후
        • ctrl+d 마무리
        • 확인 atq
        • 삭제 atrm
        • batch 시스템 부하율 실행 (atrun) @at 1회성 예약프로세스
          @batch cpu 저부하율 예약프로세스

CRON 주기적 예약프로세스

  • 구성 파일 및 기본 지식

    • /etc/crontab (크론 설정 파일 = 전체 계정 지정 가능)
    • crontab (명령어 사용자설정) - 로그인한 해당 계정에 설정
    • /etc/cron.d ( 자동 실행 스크립트 저장소)
    • run-parts ( 디렉토리 내 스크립트 실행)
  • 기본 구성문법

    [MM][HH] [DD][mm] [d][user] [command]
    분 시 일 월 요일 계정 명령어

    20 5 5 * * [계정][명령어] 매월 5일 새벽 5시 20분 마다 → 크론은 거꾸로 읽어준다.

    • 예시
     40 4     *   *   6   [계정]  [명령어] 	새벽 4:40분에 매주 토요일마다
      0 13-14  *   *   *   [계정]  [명령어] 	매일 오후 1-2사이 마다
      5  */2   *   *   *   [계정]  [명령어] 	매일 2시간간격으로 5분마다
      20 5     5   *   *   [계정]  [명령어] 	매월 5일 새벽 5시 20분 마다
      30 0     2   1,7 *   [계정]  [명령어]	 매년 1월 7월 2일이 되는날에 새벽 0시 30분마다
      
      ->date "+%Y-%m-%d  %H:%M"     Y: 년도  m: 월  d:일   H:시간 M:분  h:n월
      
  • 전역 크론 : 실행할 계정명을 지정 → vi /etc/crontab

    • /1 * * * echo "저는 Root입니다" >> /test/test.txt
  • 지역 크론 : 계정지정X , 로그인계정 O → crontab -e

    • 명령으로 cron실행 (로그인 계정으로만 실행)
      • crontab -l 예약된 작업확인
        crontab -e 예약된 작업수정
        crontab -r 예약된 작업 전부 삭제
    • /1 * * root echo "이것은 전역 Cron 루트입니다" >> /test/test.txt
      /1 * * * * sevas echo "이것은 전역 Cron sevas입니다" >> /test/test.txt
  • run-parts : 디렉토리 내부의 모든 스크립트 실행

    • 요일 = (일=0,7) 월=1 화=2 수=3 목=4 금=5 토=6 DATE=$(date "+%Y-%m-%d %H:%M")
    • * = 전부 ###
    • , = 복수선택 1,5
    • -= 범위 1-5
    • / = 간격 */1 ###
    • 크론 작성 후 : service crond restart
  • [cron (run-parts) 런파츠 (여러개의 스크립트를 한번에 돌리기)

    /etc/cron.d
    /etc/cron.daily
    /etc/cron.hourly
    /etc/cron.monthly
    /etc/cron.weekly

    • run-parts를 줄때는 반드시 파일들의 권한을 755로 해서 실행권한을 줘야함
    • 사용시 1.first / 1_first 등 숫자로 순서 정해주기

TOP : 실시간 모니터링

  • 명령어
    • h 도움말
    • m 메모리정보출력
    • l 평균부하
    • u 지정유저정보
    • k 강제종료
    • r 프로세스 우선순위조절 ( renice )
    • q 종료

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

  • PID : 프로그램 ID
  • USER: 계정
  • PR : priority 우선순위 (기본값 20)
  • NI : nice 값 ( -20 ~ +19 )
  • VIRT: 가상 메모리
  • RES : 실제 메모리
  • SHR : 공유 메모리
  • S : 상태
  • %CPU: CPU점유율
  • %MEM: 메모리 점유율
  • TIME: 동작 시간
  • command: 동작중인 프로세스

nice와 renice

  • nice (프로세스의 우선순위 변경)
    • 범위 (-20 ~ +19) → 0이 포함되기에 19
    • nice가 높을수록 우선순위가 낮음 → 우선순위를 낮춘다 = nice를 높인다
  • renice 동작 중인 프로세스 우선 순위 변경(top) - 실행 중
  • nice 구동 될 프로세스 우선순위 - 실행 시
    • nice -숫자/--숫자 [프로세스명] ** nice -1 -> +1 nice --1 ->-1 - 하나는 옵션으로 봄
    • renice -/+숫자 [pid] ** renice는 문자 그대로
  • --10 ping ==== nice
    -10 5144 ==== renice

PS : process status 프로세스 상태확인

  • 명령어
    • -a 모든 세션의 쉘을 제외한 프로세스
    • -u 계정별
    • -l long format
    • -f full format (프로세스포멧)
    • -e -e 모두 (-A 같음)
    • -x 터미널이 없는 내부 커널프로세스
    • ps 에서 많이 쓰이는 명령
      • ps -ef : 프로세스 내용 / ps -axu
  • centos 6버전이전 => 최초프로세스 init pid 1
  • centos 7버전이후 => 최초프로세스 systemd pid 1

TOP: 메모리,CPU부하율

PS (ps -ef) : 프로세스 내용

  • 내용

    • tty=>로컬터미널(teletype)
    • pts=>원격터미널(Pseudo terminal slave)
    • PID => 자식프로세스 (프로그램 실행 ID)
    • PPID => 부모프로세스,선행프로세스( PPID를 실행시킨 프로세스 ID)
      • pid는 ppid보다 클 수 없음
      • ppid가 없음 = 좀비 (고아) 프로세스
    • VSZ: 가상메모리
    • Ni : nice 수치
    • PRI : 실제 process우선순위
    • WCHAN : 프로세스가 기다리는 이벤트
    • 모드
      • 1and
        • D input/output (deep sleep)
          R Run
          S sleep
          T Stop 중지
          W paging 페이징 (커널 2.6.xx 버전부터는 유효하지 않음)
          X dead (should never be seen) 죽음 (이런 게 보이면 안되는데)
          Z ("zombie") process,좀비 프로세스, -> ppid가 없음 = 종료되었으나 부모 프로세스에 의해 수습되지 않음
      • 2and
        • < 우선순위 높은
          N 우선순위 낮은
          L lock 잠겨진 페이징
          s 세션 프로세스
          | 멀티스레드

  • pstree (프로세스를 조직도로 보여줌)
    • -p pid번호출력
    • -n pid 순서정렬
      • pstree -np

fork 와 exec

  • fork 복사 프로세스 안정성은 높으나 부하가 높음
    • (본인인증과 유사..) PPID 죽이면 다 꺼짐
    • 모든 pid들을 하나의 ppid가 관리 (apache, http..)
  • exec 대체 프로세스 안정성은 낮으나 속도 빠르고 부하가 낮음
    • (대리 인증) ppid가 사라져도 다른 프로세스(systemd(1))가 대체 가능

  • kill
    • kill 프로세스 종료
      • kill -l 시그널 종류 확인
      • skill -kill 사용자/터미널 사용자및 터미널 프로세스 강제종료
      • -stop 사용자/터미널 사용자및 터미널 프로세스 강제정지
      • -cont 사용자/터미널 정지된 사용자및 터미널 프로세스 시작
      • killall PPID포함 관련된 모든 PID종료
        (서버 자체 완전종료 : 연결자들 모두 종료)
      • killall [프로세스명]
      • kill [PID]
        • kill -9 강제종료
      • kill [PID][PID]
      • kill %번호
  • 시스템 : signal <1> SIGHUP HUP 로그아웃
    (nohup : 로그아웃해도 프로그램 실행)
    <2> SIGINT ctrl+c 동작취소
    <9> SIGKILL 강제종료 (kill -9) **
    <15> SIGTERM 정상종료 (기본값)
    (kill)
    <19> SIGSTOP 프로그램 정지
    <20> SIGTSTP 키보드 동작정지(ctrl+z)
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글