유닉스 이론과 실습

chap 8. 프로세스와 사용자 명령 익히기

leehyeon-dv 2024. 12. 9. 01:07

✨목차

  1. 프로세스의 개념과 종류
  2. 프로세스 관리명령
  3. 포그라운드와 백그라운드 프로세스
  4. 사용자 정보보기

✏️프로세스

실행중인 프로그램

  • 종류
    • 시스템 프로세스 : 유닉스 운영에 필요한 기능 수행
    • 사용자 프로세스 : 사용자들이 실행시킨 프로세스
데몬 유닉스 커널에 의해 실행되는 프로세스로 특정 서비스 제공
부모 자식 프로세스를 만드는 프로세스
자식 부모에 의해 생성된 프로세스
실행이 끝나면 부모프로세스에 결과를 돌려주고 종료
고아 실행도중에 부모 프로세스가 종료된 프로세스
고아 프로세스는 1번 프로세스를 새로운 부모로 가진다
좀비 부모프로세스가 종료처리 하지 않은 프로세스
종료되었음에도 할당된 시스템 자원이 회수되지 않은 상태 

 

✏️프로세스 관리 명령

 

ps

  • process status
  • 프로세스 정보출력(PID ,터미널, CPU 시간, 명령어)
- e 시스템에 있는 모든 프로세스 정보 출력
- f 프로세스에대한 자세한 정보 출력 
-u UID 특정 사용자에 대한 모든 프로세스 출력

 

$ ps

$ ps -e

$ ps -f

$ ps -ef | more

$ ps -u user1

 

프로세스의 종류 

UID 프로세스를 실행시킨 사용자 id
PID 프로세스번호
PPID 부모 프로세스 번호
C 프로세스의 우선순위
STIME 프로세스의 시작시간을 시분초 형식으로 출력
TTY 프로세스가 실행된 단말기 종류와 번호
CMD 실행되고 있는 프로그램 이름(명령)

 

 

pgrep [ ] 패턴

  • 프로세스 이름으로 찾아 정보를 출력
    • 솔라리스에만 있는 특별한 명령 ( =ps [ ] | grep 패턴)
    • 패턴 = 찾으려는 정보
-x 패턴과 정확히 일치하는 프로세스 정보 출력
-n  패턴을 포함하고 있는 가장 최근의 프로세스 정보출력
-u uid 특정 사용자의 모든 프로세스 출력
-l  PID와 프로세스 이름 출력
-t term 특정 단말기와 관련된 프로세스 정보 출력
$ ps -ef | grep bash

$pgrep -l bash

 

 

kill [ 시그널 ] pid

  • pid로 지정한 프로세스에게 시그널을 보냄
    • 시그널을 받은 프로세스는 지정된 동작 수행
    • 시그널을 지정하지 않으면 프로세스를 종료하는 15번 시그널 보냄
    • 사용자의 프로세스만 종료 가능
    • 관리자는 모든 프로세스 종료 가능

시그널

시그널 번호 시그널 이름 기능  기본 응답
1 SIGHUP 터미널연결이 끊어진 경우에 발생 종료
2 SIGHNT 보통 ctrl-c에 의해 발생 종료
9 SIGKILL 프로세스 강제종료시킴
이 시그널은 무시 불가
종료
15 SIGTERM 프로세스 종료
이 시그널은 무시가능
KILL명령이 보내는 기본 시그널
종료

 

예시)

$ kill -9 1511

 

pkill [ 시그널 ] 프로세스명

  • 프로세스의 명령이름으로 프로세스를 찾아 지정한 시그널 보냄

pkill sleep   -> 사용자가 소유한 프로세스만 종료가능

 

prstat [ ]

  • 동작중인 프로세스의 통계 정보를 출력
  • 프로세스 정보는 일정 시간 간격으로 자동 갱신
  • 종료 : q
-a 프로세스와 사용자에 대한 통계를 구분해 출력
-c 중복해 출력하지 않고 기존 내용의 아래쪽에 새 정보 출력
-s 키 키에 따라 정렬하여출력 (cpu, pri, rss, size) 
-u euid 해당 euid에 속한 프로세스 정보만 출력
-U uid 해당 uid에 속한 프로세스 정보만 출력

 

top [ ]

  • 주기적으로 현재 실행중인 프로세스에 대한 정보 출력
  • 자세한 요약 정보 출력
  • 종료 : q

✏️프로세스 관리명령

  • 포그라운드와 백그라운드 작업의 이해
  • 작업
    • 쉘이 프로세스를 관리하는 단위
    • 쉘은 job을 시작시키고 제어
    • 유닉스의 프로세스는 포그라운드 작업과 백그라운드 작업으로 구분가능
  • 포그라운드 처리
    • 사용작 입력한 명령이 실행되어 결과가 출력될 때 까지 프롬프트가 출력되지 않아서 다른 명령을 입력할 수 없는 처리방법
    • 포통의 처리방법 : 명령이 끝날때 까지 기대려야됨
  • 백그라운드 처리
    • 명령의 입력이 끝나면 결과에 상관없이 바로 다음 프롬프트가 출력되어 다른 명령을 입력할 수 있는 처리방법
    • 명령끝에 &붙임

 

jobs [ ]

  • 작업 번호를 지정하지 않으면 백그라운드 작업을 모두 출력
  • 특정 작업 번호를 지정하면 해당 작업의 정보만 출력
  • 작업번호
    • %번호 : 해당번호의 작업 정보출력
    • %- : 작업 순서가 -인 작업 정보 출력
    • %+ 또는 %% : 작업 순서가 +인 작업 정보 출력
작업번호 [1] 작업번호로 백그라운드를 실행할때마다 순차적으로 증가
작업 순서 + 작업 순서를 표시
+ : 가장 최근에 접근한 작업
-  : +작업보다 바로 전에 작업
공백 : 그 외의 작업
상태 running 작업의 상태표시
실행중 
완료
종료
정지
명령 sleep 100 & 백그라운드로 실행 중인 명령

 

작업 전환 및 종료 명령

ctrl+z 또는 stop [%작업 번호] 포그라운드 작업을 중지시킴
bg [%작업번호] 작업번호가 지시하는 작업을 
백그라운드 작업으로 전환시킴
fg [%작업번호] 작업번호가 지시하는 작업을 포그라운드
작업으로 전환시킴

 

 

nohub 명령&

  • 로그아웃을 한 뒤에도 백그라운드 작업을 계속 진행
    • 원래는 로그아웃하면 실행중인 모든 작업 종료됨
    • 명령 실행결과와 오류메시지: nohub.out 파일에 저장

 

✏️ 사용자 정보보기

  • 로그인한 사용자 정보
    • users
    • who
    • w
  • 사용자 자신의 정보보기
    • who am i
    • whoami
    • Id
  • 사용자전환하기
    • su 

users

  • 현재 시스템에 로그인 하고있는 사용자 명 출력

who [ ]

  • 시스템을 사용하고 있는 사용자 정보 출력
-q 사용자 명만 출력 (= users)
-H 출력항목의 제목도 함께출력 
-b 마지막으로 재부팅한 날짜와 시간 출력

 

w [사용자명]

  • 로그인한 사용자 정보와 현재 작업 정보 출력

who am i

  • who 명령의 결과 중 자신에 대한 정보만 출력

whoami

  • 사용자의 로그인 id출력

su [ - ] [사용자명]

  • 사용자 계정 변경
  • 아무 옵션 없이 사용하려면 root로 변경
  • 사용자명 지정 : 지정한 사용자로 변경

✏️연습문제

 

1. 유닉스의 프로세스 종류 

  • 데몬 프로세스
  • 부모 프로세스
  • 자식 프로세스
  • 고아 프로세스
  • 좀비 프로세스

2. 유닉스의 고아 프로세스와 좀비 프로세스의 차이

고아 = 자식 프로세스가 결과를 돌려주기 전에 부모 프로세스가 먼저 종료되어버린 프로세스

좀비 = 모든 자원을 반납하였지만 부모 프로세스로 부터 작업 종료에 대한 승인을 받지 못해 프로세스 테이블 목록을 차지하고 있는 프로세스들이다

 

 

3. user1 사용자가 실행시킨 프로세스를 모두 찾기위해 사용할 수 있는 명령

ps -u user1

ps -ef | grep user1

 

4.user1 사용자가 실행시킨 모든 프로세스의 실행날짜를 알아보는 방법

ps -ef | grep user1

 

5.pgrep 명령을 사용해 현재 실행중인 모든 bash를 검색한 결과와 ps 명령을 사용해 현재 실행 중인 모든 bash를 검색한 결과 차이점

 

pgrep -l bash

ps -f | grep bash

 

6.포그라운드 작업과 백그라운드 작업의 차이

포그라운드 = 사용자가 명령 입력 후 결과가 출력될때 까지 기다려야하는 경우

백그라운드 = 명령을 백그라운드 방식으로 실행시키면 명령의 처리와 관계없이 곧바로 프롬프트가 출력되어 사용자는 다른 작업을 계속할 수 있음 (마지막에 &추가)

 

7. 현재 실행중인 포그라운드 작업을 백그라운드 작업으로 전환시키는 방법

  1. ctrl+z로 find 명령의 실행을 중단시킴
  2. bg명령으로 백그라운드 작업으로 전환시킴

8. 현재 실행중인 백그라운드 작업을 포그라운드 작업으로 전환시키는 방법

[1]+ Running sleep 100

 

fg %1

 

9. find/ -name unix 명령이 로그아웃한 다음에도 계속 동작하도록 실행시키는 명령

nohub find / -name unix &

 

10. 시스템이 부팅한 날짜와 시간을 알기 위한 명령

who -b

 

11. ps -f 명령의 결과가 아래와 같을때 프로세스의 부모-자식 관계를 설명 

UID PID PPID C STIME TTY TIME CMD

user1 15761 15721 0 18:14:17 pts/1 0:00 vi test.c

user1 15721 15710 0 18:14:09 pts/1 0:00 ksh

user1 15710 15701 0 18:12:59 pts/1 0:00 bash

 

부모 → 15710 → 15721  → 15761

 

12. 11번에서 실행중인 프로세스 중 vi test.c 프로세스를 강제 종료시키는 과정

kill 15761

또는

kill -9 15761  (강제종료)

 

13. 다음과 같이 백그라운드로 실행중인 작업이 3개 있다 이 중 3번 작업을 종료시키는 명령을 기술

[1]+ Running sleep 100

[2]- Running find /-name unix

[3] Runnung sleep 300

 

kill %3