본문 바로가기
KNOU/UNIX

[UNIX시스템] 프로세스 관리

by bottlesun 2022. 11. 30.
728x90

프로세스 정의

커널에 등록되어 관리를 받는 작업 또는 실행 중인 프로그램

  • 커널은 프로세스 관리 블록(PCB) 에 프로세스에 관한 정보를 저장
  • 프로세스는 시스템 자원을 사용하며 여러 상태 변화를 겪음
  • 각 프로세스는 유일한 PID 를 가짐

프로세스 관리 블록

  • 커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역
  • → 프로세스 들은 모두 커널 공간에 자신의 정보를 가짐
  • 프로세스 관리 블록(PCB) 에 저장하는 정보
    • PID , PPID
    • UID , EUID or GID , EGID
    • 프로세스의 상태 및 우선순위
    • 사용중인 자원에 관한 정보 (메모리주소, 입출력장치, 파일…)
    • 대기중인 시그널 리스트
    • 문맥 교환 정보

명령의 실행과 프로세스 생성

  • 셸에서 명령을 실행하면 새로운 프로세스가 만들어져 처리 됨
  • 시스템 호출 fork( )를 호출하여 기존 부모 프로세스가 자신의 복사본 자식
    프로세스를 만듦
  • 부모 프로세스는 보류 상태에 있다가 자식 프로세스가 종료되면서 깨어남
  • pstree 명령 은 프로세스 트리를 보여준다.

포어 그라운드(foreground) 프로세스

쉘 프롬프트에서 명령을 실행하면 포어그라운드 모드로 수행됨

  • 포어그라운드 프로세스가 끝나기 전에는 다른 명령 수행 불가
  • 터미널로부터 키보드 입력을 받을 수 있는 프로세스

백그라운드(background) 프로세스

백그라운드로 실행하려면 쉘프롬프트에서 명령의 끝에 &를 추가하여 실행

  • 백그라운드로 프로세스를 실행시키면 쉘은 즉시 명령 대기 상태가 됨
  • 터미널 출력 o 키보드 입력 x

포어그라운드/백그라운드로 명령을 실행

$ find / -name '*.bak' > list.bak 2>&1 & // 디렉터리 검색 (백그라운드 모드 실행)
[1] 7651 // [jabs id] 프로세스id
$ [enter key 를 누른다] // 상태를 확인 가능
[1]+ Exit 1    find / -name '*.bak' > list.bak 2>&1 // find 명령이 종료 됨을 알 수 있다.
$ firefox // firefox 브라우저 (포어그라운드 실행)
^C // 실행 종료
$ firefox // firefox 브라우저 (포어그라운드 실행)
^Z // 백그라운드 멈춤 상태
[1]+ Stopped firefox // 멈춘걸 확인 할 수 있다.
$ jobs // 백그라운드 프로세스 확인
[1]+ Stopped firefox // 멈춰있는걸 확인 가능
$ bg 1 //
[1]+ firefox &
$ jobs
[1]+ Running firefox &
$ fg 1
firefox

SetUID

  • 파일의 접근권한에서 소유자의 실행권한에 s가 표시 된다.
  • 파일이 실행될 때 ‘파일 소유자’ 권한으로 실행 된다.

설정 방법은 chmod 4755 file 또는 chmod u+s file
해제 방법은 chmod 0755 file 또는 chmod u-s file

$ ls -l /etc/passwd
-rw-r--r--. 1 root root 1813 2017-10-21 13:51 /etc/passwd
$ ls -l /usr/bin/passwd
-rw**s**r-xr-x. 1 root root 25980 2015-11-24 01:28 /usr/bin/passwd

SetGID

  • 파일의 접근 권한에서 그룹의 실행 권한에 s가 표시 됨
  • 디렉터리나 or 파일을 실행하면 ‘디렉터리 or 파일 소유자’의 그룹 권한으로 실행 된다.

설정 방법은 chmod 2755 file 또는 chmod g+s file

StickyBit

  • 파일 접근 권한에서 기타 사용자의 실행 권한에 t가 표시
  • 주로 공유 디렉터리에 설정되며, 누구나 그 디렉터리에 파일 생성할 수 있지만
    파일의 소유자만 삭제할 수 있음

설정 방법은 chmod 1755 file 또는 chmod o+t file

$ ls -ld /tmp
drwxrwxrwt. 16 root root 4096 2017-01-12 21:01 /tmp

프로세스의 상태 변화

제한된 자원과 멀티 태스킹을 지원하는 운영체제에서 프로세스는 여러 상태 변화를 겪음

ps 명령

현재 프로세스의 상태를 확인하는 명령

현재 터미널과 연결 된 프로세스의 EUID가 사용자에 UID값과 같은 프로세스를 출력해준다

ps [options]

$ ps -ef --forest
UID PID PPID C STIME TTY TIME CMD
<중간 생략>
kdhong 2773 1 0 20:10 ? 00:00:04 gnome-terminal
kdhong 2775 2773 0 20:10 ? 00:00:00 \_ gnome-pty-helper
kdhong 2776 2773 0 20:10 pts/0 00:00:00 \_ bash
kdhong 3501 2776 0 22:18 pts/0 00:00:00 | \_ ps -ef --forest

top 명령

현재 실행 중인 프로세스의 모니터링과 관리를 위한 대화식 도구

CPU와 메모리 사용량 및 시스템의 부하 등의 실시간 정보를 주기적으로 보여준다.

top [options]

kill 명령

프로세스에 시그널을 보내는 명령 (시그널은 프로세스를 관리 방법이고 프로세스 간 통신 수단)

다른 프로세스에게 시그널을 보내도록 커널에게 요청하는 것

kill [-signal ] pids
kill [-s signal ] pids

killall 명령

특정 프로세스에 한번에 시그널을 보내는 명령

프로그램이나 프로세스의 이름을 사용

killall [options ] [-s signal ] [-u user] names

nice 와 renice 명령

‘nice 우선순위(NI) 값’ 을 조정하는 명령(NI 값은 -20(가장 높음) ~ 19(가장 낮음))

우선순위가 높으면 CPU를 점유할 확률이 높음

nice

명령을 실행 할 때 NI 값을 조정 하는 명령

nice [option] [command]

renice

실행 중인 프로세스의 NI 값(절댓값) 을 바꾸는 명령

renice priority [options]

nohup 명령

HUP 시그널과 무관하게 명령이 스스로 종료 될 때까지 계속 수행 시키는 명령

로그아웃을 하거나 터미날 창을 끝내면 프로세스에 HUP 시그널이 보내짐

nohup find -size +100k > log.txt &


cron 서비스

지정된 시간에 주기적으로 자동 수행되는 작업을 수행함

crond 데몬 프로그램이 서비스를 제공

cron 서비스를 이용한 자동 스케줄

/etc/crontab 파일과 /etc/cron.d/ 디렉터리에 존재하는 파일

시스템 수준에서 주기적으로 수행될 작업을 설정

crontab 파일의 형식

환경 변수의 설정과 cron 작업의 수행 방법을 정의

$ cat /etc/cron.d/0hourly
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly

항목의 의미

분(0

59), 시(0

23), 날짜(0

31), 달(1

12), 요일(0~7)

*는 매번을 의미, 간격 표시를 위해 /, 범위 표시를 위해 -와 ,를 사용할 수 있음

사용자, 실행할 명령

사용자는 시스템 수준 crontab 파일의 경우에만 지0 */6 * * 1-5 /bin/mail –s ˝Hi˝ jjpark@localhost

→ 0분, 6시간마다,매일,매달,월-금요일에 hi 메일을 보낸다

crontab 명령

일반 사용자가 자신의 cron 작업을, 자신의 crontab 파일에 등록 할 때 사용해야 하는 명령

crontab [options]

728x90

댓글