본문 바로가기

Linux

리눅스 스터디 4주차

1. 프로세스

 1) 프로세스(process)

  실행 중인 프로그램

  - 각 프로세스는 유일한 프로세스 번호 PID를 갖는다.

  - 각 프로세스는 부모 프로세스에 의해 생성된다.

 

 2) 프로세스 상태 보기 : ps(process status)

  - 사용법

   $ ps [-옵션]

   현재 시스템 내에 존재하는 프로세스들의 실행 상태를 요약해서 출력한다.

   *

   %CPU : CPU 사용률

   %MEM : 메모리 점유율

   VSZ : 가상 메모리 영역의 크기 / RSS : 물리 메모리 영역의 크기

   STAT : 프로세스의 현재 상태

    ㄴ R : 실행 대기 / S : 수면 상태 / D : 입출력을 기다리는 상태 / T : 멈춰 있거나 흔적이 남아 있는 상태 /

        Z : 완전히 죽은 상태 / N : 우선순위가 낮은 프로세스 / < : 우선순위가 높은 프로세스 / I : idle 상태

   START : 프로세스가 시작된 시간

   TIME : 프로세스의 총 사용 시간(CPU를 사용한 시간)

   COMMAND : 프로세스를 실행한 명령행

 

   $ ps

   $ ps u (나의 프로세스 정보)

   $ ps aux(시스템 내의 모든 프로세스에 대한 정보)

 

항목 의미
UID 프로세스를 실행시킨 사용자 ID
PID 프로세스 번호
PPID 부모 프로세스 번호
C 프로세스의 우선 순위
STIME 프로세스의 시작 시간
TTY 명령어가 시작된 터미널
TIME 프로세스에 사용된 CPU 시간
CMD 실행되고 있는 명령어(프로그램) 이름

 

 2) 특정 프로세스 리스트 : pgrep

  - 특정 프로세스만 리스트

   $ ps -ef | grep -w sshd

  - 사용법

   $ pgrep [옵션][패턴]

   패턴에 해당하는 프로세스들만을 리스트한다.

 

   -l : PID와 함께 프로세스의 이름을 출력한다.

   -f : 명령어의 경로도 출력한다.

   -n : 패턴과 일치하는 프로세스들 중에서 가장 최근 프로세스만을 출력한다.

   -x : 패턴과 정확하게 일치되는 프로세스만 출력한다.

 

2. 작업 제어

 1) 쉘과 프로세스

 

 

 2) 쉘 재우기

  - 사용법

   $ sleep 초

   명시된 시간만큼 프로세스 실행을 중지시킨다.

 

start가 출력된 후 5초 후에 end가 출력되었다.

 

 3) 강제 종료

  - 강제 종료 Ctrl-C

  - 실행 중지 Ctrl-Z

 4) 후면 작업의 전면 전환 : fg(foreground)

  - $ fg %작업번호

 

 5) 전면 작업의 후면 전환 : bg(background)

  - 사용법

   Ctrl-Z 키를 눌러 전면 실행 중인 작업을 먼저 중지시킨 후 bg 명령어를 사용하여 후면 작업으로 전환

  - $ bg %작업번호

   작업번호에 해당하는 중지된 작업을 후면 작업으로 전환하여 실행한다.

 6) 후면 작업의 입출력 제어

  - 후면 프로세스 출력

   모니터에 출력한 것은 전면 프로세스의 출력과 뒤섞인다.

   출력 재지정 이용

  - 후면 프로세스 입력

   키보드로부터 모든 입력은 전면 프로세스가 받기 때문에 후면 프로세스는 키보드로부터 입력을 받을 수 없다.

   입력 재지정 이용

test.c라는 이름을 가진 파일을 찾아 출력하는 후면 작업. 이에 대한 출력은 find.txt로 재지정. test.c 파일 내용 정보를 표시하는 후면 작업. 후면 작업은 키보드로부터 입력받을 수 없으므로 입력 재지정 이용.

 

3. 프로세스 제어

 1) 프로세스 끝내기 : kill

  - 프로세스 강제 종료

   $ kill 프로세스 번호

   $ kill %작업번호

   프로세스 번호(혹은 작업 번호)에 해당하는 프로세스를 강제로 종료시킨다.

 

 2) 프로세스 기다리기 : wait

  - 사용법

   $ wait [프로세스 번호]

   프로세스 번호로 지정한 자식 프로세스가 종료될 때까지 기다린다.

   프로세스 번호를 지정하지 않으면 모든 자식 프로세스가 끝나기를 기다린다.

 3) 프로세스 우선 순위

  - 실행 우선 순위 nice 값

   19(제일 낮음) ~ -20(제일 높음)

  - nice 명령어

   $ nice [-n 조정수치] 명령어 [인수들]

   주어진 명령을 조정된 우선 순위로 실행한다.

 

   ex) $ nice -n 10 ps -ef

       ps -ef 명령을 10이라는 조정된 우선 순위로 실행.

 

 4) 프로세스 우선 순위 조정

  - 사용법

   $ renice [-n] 우선 순위 [-gpu] PID

   이미 수행 중인 프로세스의 우선 순위를 명시된 우선 순위로 변경한다.

   -g : 해당 그룹명 소유로 된 프로세스를 의미한다.

   -u : 지정한 사용자명의 소유로 된 프로세스를 의미한ㄷ.

   -p : 해당 프로세스의 PID를 지정한다.

 

4. 프로세스의 사용자 ID

 1) 프로세스의 사용자 ID

  - 프로세스는 프로세스 ID 외에 프로세스를 실행시킨 사용자의 ID와 사용자의 그룹 ID를 갖는다.

    이는 프로세스가 수행할 수 있는 연산을 결정하는 데 사용된다.

  - id 명령어

   $ id [사용자명]

   사용자의 실제 ID와 유효 사용자 ID. 그룹 ID 등을 보여준다.

   - 프로세스의 실제 사용자 ID(real user ID)

   그 프로세스를 실행한 원래 사용자의 사용자 ID로 설정된다.

   ex) change라는 사용자 ID로 로그인하여 프로그램을 실행시키면 그 프로세스의 실제 사용자 ID는 change가 된다.

 

  - 프로세스의 유효 사용자 ID(effective user ID)

   현재 유효한 사용자 ID. 보통 유효 사용자 ID와 실제 사용자 ID는 같다.

   특정 실행파일(2), 3))을 실행할 때 유효 사용자 ID는 달라진다.

   새로 파일을 만들 때나 파일 접근 권한을 검사할 때 주로 사용된다.

 

 2) set-user-id 실행파일

  - set-user-id(set user ID upon execution) 실행 권한

   set-user-id가 설정된 실행파일을 실행하면 이 프로세스 유효 사용자 ID는 그 실행파일의 소유자로 바뀌고,

   이 프로세스가 실행되는 동안 그 파일의 소유자 권한을 갖게 된다.

 

 3) set-group-id 실행파일

  - set-group-id(set group ID upon execution) 실행 권한

   실행파일이 실행되는 동안 그 파일 소유자의 그룹을 프로세스의 유효 그룹 ID로 갖게 된다.

   set-group-id 실행 권한은 8진수 모드로는 2000으로 표현된다.

 

 4) set-user-id / set-group-id 설정

  - $ chmod 옵션 (8진법 수) 파일

    8진법 수의 맨 앞자리가 4 : set user ID

                                   2 : set group ID

                                   6 : set user, group ID

 

  * set-user-id 실행 권한 설정

   $ chmod 4755 test : test 파일의 사용자 ID 설정을 지정하고, user에게 rwx 권한 부여,

                               group과 other에게 r-x 권한을 부여한다.

   * set-group-id 실행 권한 설정

    $ chmod 2777 test : test 파일의 그룹 ID 설정을 지정하고, user, group, other의 권한을 모두 rwx로 변경한다.

 

  - $ chmod u+s 파일 : set-user-id 실행 권한 설정

    $ cmmod g+s 파일 : set-group-id 실행 권한 설정

 

5. 시그널과 프로세스

 1) 시그널

  - 시그널은 예기치 않은 사건이 발생할 때 이를 알리는 소프트웨어 인터럽트이다.

  - 시그널 발생 예

   SIGFPE : 부동소수점 오류

   SIGPWR : 정전

   SIGALRM : 알람시계 울림

   SIGCHLD : 자식 프로세스 종료

   SIGINT : 키보드로부터 종료 요청 (Ctrl-C)

   SIGSTP : 키보드로부터 정지 요청 (Ctrl-Z)

 

 2) 주요 시그널

 

 3) 시그널 보내기 : kill 명령어

  - kill 명령어

   한 프로세스가 다른 프로세스를 제어하기 위해 특정 프로세스에 임의의 시그널을 강제적으로 보낸다.

  - 사용법

   $ kill [-시그널] 프로세스 번호

   $ kill [-시그널] %작업번호

   프로세스 번호(혹은 작업 번호)로 지정된 프로세스에 원하는 시그널을 보낸다.

   시그널을 명시하지 않으면 SIGTERM 시그널을 보내 해당 프로세스를 강제 종료한다.

'Linux' 카테고리의 다른 글

리눅스 스터디 6주차  (0) 2020.12.31
리눅스 스터디 5주차  (0) 2020.12.25
리눅스 스터디 3주차  (0) 2020.09.28
리눅스 스터디 2주차  (0) 2020.09.20
리눅스 스터디 1주차  (0) 2020.09.08