15일차 - 리눅스 (프로세스 제어 및 작업관리 / 아카이브, 압축)

Jk Lim·2023년 4월 28일
0

MLOps 부트캠프

목록 보기
14/34

15일차는

  1. 프로세스 제어 및 작업관리
  2. 아카이브와 압축에 대해서 학습하였다.

1. 프로세스 제어 및 작업관리

(1) 프로세스 및 관련 명령어

  • 운영체제는 PR(priority) List 라고 해서 프로그램을 동작 시키기 위한 순서가 존재한다.
    NICE 정보를 계산해서 실질적으로 동작시킴. (NICE : 프로세스 간 우선순위)
  • 부모 프로세스가 자식 프로세스를 생성 및 Run 시키고 자신은 sleep 상태로 바뀜 (interrupt)
    Run 하게 되면 PID Number와 메모리영역을 할당 받는다.
    Exit 하게 되면 할당 받는 것들을 반납
  • 고아프로세스 : Exit 명령을 내렸지만 사라지지 않은 상태에서, 부모 프로세스가 먼저 사라진 프로세스. PID 및 메모리를 회수 및 컨트롤 할 수 있는 방법이 없음. ⇒ 현재는 대부분 해결 된 상태. 부모의 부모프로세스가 챙겨갈 수 있다.
  • 좀비프로세스 : 프로세스 오류로 인해 Exit 명령에도 사라지지 않음. 흐름이 다음으로 넘어가지 못함. defunct 상태. 메모리 자원 낭비. 이것이 많아지면 껐다 켜야함.

명령어

  • ps -ef : 부모 자식 프로세스 확인용
  • ps aux : 하나의 프로세스에 대한 상태를 확인하는데 유용
  • top : 운영체제의 현재 상태를 모니터링

  • 프로세스 정보 확인
[root@localhost ~]# ps -ef | grep ssh[d]
root      1037     1  0 09:41 ?        00:00:00 /usr/sbin/sshd -D
root      1062  1037  0 09:41 ?        00:00:00 sshd: root@pts/1
[root@localhost ~]# cat /var/run/sshd.pid
1037
[root@localhost ~]# ls -l /proc/1037/exe
lrwxrwxrwx. 1 root root 0  428 09:41 /proc/1037/exe -> /usr/sbin/sshd
[root@localhost ~]# rpm -qf /usr/sbin/sshd
openssh-server-7.4p1-21.el7.x86_64
[root@localhost ~]# rpm -qi openssh-server
Name        : openssh-server
Version     : 7.4p1
Release     : 21.el7
...
[root@localhost ~]# rpm -ql openssh-server
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/lib/systemd/system/sshd-keygen.service
...
[root@localhost ~]# rpm -V openssh-server   ### 패키지 무결성 체크
 ### 패키지 신뢰도 체크. 무언가 내용이 바뀌면 표시됨. 정상은 아무것도 표기 안됨.
[root@localhost ~]# lsof -p 1037  ### 이 PID가 동작할 때, 읽어들인 파일 목록
COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
sshd    1037 root  cwd    DIR                8,2      258        64 /
sshd    1037 root  rtd    DIR                8,2      258        64 /
sshd    1037 root  txt    REG                8,2   852856 203939834 /usr/sbin/sshd
sshd    1037 root  mem    REG                8,2    61560 201490822 /usr/lib64/libnss_files-2.17.so
sshd    1037 root  mem    REG                8,2    68192 201513539 /usr/lib64/libbz2.so.1.0.6
sshd    1037 root  mem    REG                8,2    99944 201513608 /usr/lib64/libelf-0.176.so
...
[root@localhost ~]# pgrep sshd   ### 프로세스 이름으로 찾아보기
1037
1062
  • (참고) var 디렉토리 : 로그 파일 분석에 사용
[root@localhost ~]# ls -ld /var
drwxr-xr-x. 20 root root 282  419 17:36 /var
[root@localhost ~]# ls -ld /var/run
lrwxrwxrwx. 1 root root 6  419 17:21 /var/run -> ../run
[root@localhost ~]# ls -ld /run
drwxr-xr-x. 42 root root 1280  428 09:41 /run

(2) 시그널

  • 운영체제에서 특정 이벤트가 발생하였을 때, 신호를 보내서 알려주는 것
  • 글자를 입력하는 순간에도 시그널을 주고 받는다.
  • 시그널은 프로세스를 제어하기 위해 사용됨.
  • 시그널 종류
 [root@localhost ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX
 ### 번호 또는 이름으로 사용 가능 kill -9 or kill -SIGKILL
 ### kill : PID 번호를 입력받아 시그널 보냄
 ### pkill : 프로세스명을 입력받아 시그널 보냄 → 잘못하면 다 날라갈 수 있다.
 ### 참고) SIGHUP (행업) : 프로세스를 죽이지 않고 Restart

(3) job control

  • foreground : task가 실행 중 터미널을 물고 있음
[root@localhost ~]# sleep 60 &
[2] 4491
[root@localhost ~]# jobs
[1]+  Stopped                 vim aaa
[2]-  Running                 sleep 60 &
[root@localhost ~]# fg %2
sleep 60
  • background : task가 실행 중에도 현재 터미널을 사용할 수 있음
[root@localhost ~]# sleep 300
^Z
[1]+  Stopped                 sleep 300
[root@localhost ~]# jobs
[1]+  Stopped                 sleep 300
[root@localhost ~]# bg %1
[1]+ sleep 300 &
[root@localhost ~]# jobs
[1]+  Running                 sleep 300 &
[root@localhost ~]# fg %1
sleep 300
[root@localhost ~]# fg %1
sleep 300
^C
[root@localhost ~]# jobs
[root@localhost ~]#

### sleep 300 실행 중 Ctrl+z로 stopped → jobs로 control number 확인 → bg %1로 백그라운드 실행 → fg %1로 포그라운드 실행 → Ctrl+c 로 종료
### 예) vi에디터에서 ctrl z 사용하면 background로 가고 스탑상태. 스왑파일 생성됨
[root@localhost ~]# vim aaa

[1]+  Stopped                 vim aaa
[root@localhost ~]# ps aux | grep "vim aaa"
root      4439  0.0  0.2 149864  5532 pts/1    T    12:06   0:00 vim aaa
root      4474  0.0  0.0 116972  1016 pts/1    S+   12:07   0:00 grep --color=auto vim aaa
[root@localhost ~]# jobs
[1]+  Stopped                 vim aaa     ### [1] : job control number
  • task의 종료는 foreground 상태에서 ctrl+c 또는 job control number를 사용해 kill %1, kill %1 등으로 종료

2. 아카이브, 압축

(1) 아카이브

아카이브의 특징

  1. 같은 경로에 아카이브를 풀면 기존이랑 같은 inode를 갖는다.
  2. 아카이브는 압축처럼 묶어주는데, 경로같은 추가적인 정보도 같이 포함되기 때문에 기존 파일들보다 용량이 커진다.
    (C : 다른 경로 지정 옵션)
[root@localhost ~]# tar xvf ab.tar -C /tmp
aaa
bbb
[root@localhost ~]# ls -li aaa bbb
ls: cannot access aaa: 그런 파일이나 디렉터리가 없습니다
ls: cannot access bbb: 그런 파일이나 디렉터리가 없습니다
[root@localhost ~]# ls -il /tmp/aaa /tmp/bbb
2621 -rw-r-----. 1 root root 2259  428 12:38 /tmp/aaa
2623 -rw-r-----. 1 root root 2259  428 12:38 /tmp/bbb

(2) 압축, 해제

  • gzip, bz2, xz 방식
[root@localhost ~]# ls -l aaa bbb
-rw-r-----. 1 root root 2259  428 12:38 aaa
-rw-r-----. 1 root root 2259  428 12:38 bbb
[root@localhost ~]# tar zcvf ab.tgz aaa bbb
[root@localhost ~]# tar zxvf ab.tgz
[root@localhost ~]# 
[root@localhost ~]# tar jcvf ab.tar.bz2 aaa bbb
[root@localhost ~]# tar jxvf ab.tar.bz2
[root@localhost ~]#
[root@localhost php]# ls
php-8.2.5  php-8.2.5.tar.bz2  php-8.2.5.tar.gz  php-8.2.5.tar.xz
[root@localhost php]# tar zxf php-8.2.5.tar.gz
[root@localhost php]# tar jxf php-8.2.5.tar.bz2
[root@localhost php]# tar -xf php-8.2.5.tar.xz

0개의 댓글