프로그래밍 공부
작성일
2022. 10. 26. 20:56
작성자
WDmil
728x90

프로세스 = 부모자식 관계

부모 프로세스는 자식 프로세스를 생성하고 자식 프로세스는 또 다른 자식 프로세스 생성 가능

자식 프로세스는 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료

 

자식 프로세스가 종료 되면 부모 프로세스로 리턴값을 돌려주고 종료된다.

 


프로세스 종류

 

데몬 프로세스

  • 백그라운드 에서 특정 서비스 제공하기 위해 존재, 리눅스 커널에 의해 실행

 

고아 프로세스

  • 자식 프로세스가 아직 실행중인데 부모가 없어지면 발생,
  • (init)1번 프로세스가 고아 프로세스의 새로운 부모가 되도록 지원

 

좀비 프로세스

  • 자식 프로세스가 실행을 종료했는데도 리턴값이 정상적으로 돌아오지 않았을 때, 프로세스 테이블 목록에 남아 있는 경우
  • 좀비 프로세스가 증가하면,프로세스 테이블의 용량이 부족해서 일반 프로세스가 실행되지 않을 수도 있음.

 

프로세스 목록 보기

현재 실행 중인 프로세스의 목록을 보는 명령 : ps

ps  
기능 현재 실행중인 프로세스 정보 출력
형식 ps 옵션
옵션 < 유닉스 옵션 > -e : 시스템에서 실행중인 모든 프로세스의 정보 출력
-f  : 프로세스에 대한 자세한 정보 출력
-u uid : 특정 사용자에 대한모든 프로세스 정보 출력
-p pid : pid로 지정한 특정 프로세스의 정보를 출력한다.
< BSD 옵션 > a : 터미널에서 실행한 프로세스의 정보를 출력한다.
u : 프로세스 소유자의 이름, CPU 사용량, 메모리 사용량 등
x : 시스템에서 실행중인 모든 프로세스 정보를 출력한다.
<GNU 옵션> --pid PID 목록 : 목록으로 지정한 특정 PID 정보를 출력한다.
사용 예 ps     ps-ef     ps aux

 

ps -f

ps -f의 출력 정보

항목 의미 항목 의미
UID 프로세스를 실행한 사용자 ID STME 프로세스의 시작 날짜나 시간
PID 프로세스 번호 TTY 프로세스가 실행된 터미널의 종류와 번호
PPID 부모 프로세스 번호 TIME 시간정보 출력
C CPU 사용량(%값) CMD 실행되고 있는 프로그램 이름(명령)

 

STAT에 사용되는 문자 의미

문자 의미 비고 문자 의미 비고
R 실행중(running)   STIME 프로세스의 시작 날짜나 시간  
S 인터럽트가 가능한 대기(sleep)상태   s 세션 리더 프로세스 BSD
형식
T 작업 제어에 의해 정지된 (stooped)상태   + 포그라운드 프로세스 그룹
Z 좀비 프로세스(defunct)   l(소문자L) 멀티 스레드

터미널에서 실행한 프로세스 정보 출력하기 : a

ps a

다양한 옵션 : a, u 옵션

a와 u옵션을 함께 사용하면, 터미널에서 실행한 프로세스의 상세정보를 출력, CPU와 메모리 사용량 등

ps au

항목 의미 항목 의미
USER 사용자 계정 이름 VSZ 사용하고 있는 가상 메모리의 크기
$CPU CPU 사용량을 퍼센트로 표시 RSS 사용하고 있는 물리적 메모리의 크기
%MEM 물리적 메모리 사용량을 퍼센트로 표시 START 프로세스 시작 시간

 

전체 프로세스 목록 출력하기 (BSD 옵션) :ax옵션

시스템에서 실행중인 모든 프로세스를 출력

 

-aux 옵션을 -ef처럼 시스템에서 실행 중인 모든 프로세스에 대한 자세한 정보를 출력

 

특정 사용자의 프로세스 목록 출력하기 : -u 옵션

 

- 더 상세한 정보를 보고 싶으면 -f옵션을 함께 사용( 옵션 사용 순서 지켜야 함 )

 

ps-ef 로 데이터를 가져오면 데이터 양이 많기 떄문에 grep 명령을 | 로 연결하여 특정 프로세스 에 대한 정보만 따로 가져와서 검색 하면 된다.

 

pgrep 명령을 이용해 특정 프로세스 정보 검색하기

pgrep  
기능 지정한 패턴과 일치하는 프로세스에 대한 정보를 출력한다
형식 pgrep [옵션] [패턴]
옵션 -x : 패턴과 정확히 일치하는 프로세스 정보를 출력한다.
-n : 패턴을 포함하고 있는 가장 최근의 프로세스 정보를 출력한다
-u 사용자 이름 : 특정 사용자에 대한 모든 프로세스를 출력한다.
-l : PID와 프로세스 이름을 출력한다.
-t term : 특정 단말기와 관련된 프로세스 정보를 출력한다.
사용 예 pgrep bash

 

-bash 패턴을 지정하여 검색한 예

pgrep 명령에 -l ( 소문자 L ) 을 지정하여 PID에 이름만 출력함.

 

ps -fp $(pgrep -x bash)

ps에서 bash라는 이름을 가진 데이터를 추출하여 데이터를 표시한다.

 

옵션으로 사용자 명을 지정하여 검색을 가능함.

ps -fp $(pgrep -u user bash)

 

kill 명령을 이용해 프로세스 종료 가능.

kill  
기능 지정한 시그널을 프로세스에 보낸다
형식 kill [ 시그널 ] PID
시그널 -2 : 이넡럽트 시그널을 보낸다.
-9 : 프로세스를 갖에로 종료한다.
-15: 프로세스가 관련된 파일을 정리하고 프로세스를 종료한다. 종료되지 않는 프로세스
사용 예 kill 1001          kill -15 1001          kill -9 1001

ps -fp $(pgrep -x man) : man 이라는 패턴을 정확하게 인식하고있는 데이터를 ps로 리턴해라.

 

여기서 이 프로세스를 강제 종료 하려면,

kill -9 2688(프로세스 번호) 를 치면 된다.

pkill -x man

이라고 쳐도, 위의 kill 명령과정이 빠르게 진행된다,  그러나 이 명령어는 man이 포함되는 다른 프로세스가 있을 수도 있기 때문에, 다른 모든 man관련 프로그램도 종료가 된다.

 

프로세스 관리 도구

- top 명령 : 현재 실행중인 프로세스에 대한 정보를 주기적으로 출력

항목 의미 항목 의미
PID 프로세스 ID SHR 프로세스가 사용하는 공유 메모리 크기
USER 사용자 계정 %CPU CPU 사용량
PR 우선순위 %MEM 메모리 사용량(%)
NI Nice 값 TIME+ CPU 누적 이용 시간
VIRT 프로세스가 사용하는 가상 메모리 크기 COMMAND 명령 이름
RES 프로세스가 사용하는 메모리 크기    
항목 의미 항목 의미
Enter, Space Bar 화면을즉시 다시 출력한다. u 사용자에 따라 정렬하여 출력한다.
h, ?  도움말 화면을 출력한다. M 사용하는 메모리 크기에 따라 정렬하여 출력한다.
k 프로세스를 종료한다. 종료할 킬 프로세스의 PID를 물어본다. p CPU 사용량에 따라 정렬하여 출력한다.
n 출력한 프로세스의 개수를 바꾼다 q top 명령을 종료한다.

-t 옵션을 이용 하여 CPU 별로 사용량을 확인 가능

GNOME = 윈도우 작업 관리자 같은 형태로 출력할 수 있음

 

포 그라운드 작업

사용자가 입력한 명령이 실행되고 결과가 출력될 때까지 기다려야 하는 방식으로 처리되는 프로세스

sleep 100 ( 100초간 기다림)

 

백그라운드 작업

명령을실행하면 명령의 처리가 끝나는것과 관계없이 곧바로 프롬프트가 출력되어 사용자가 다른 작업을 계속할 수 있음

sleep 100&

프롬프트가 나와서 작업 진행 가능

 

백그라운드 작업과 출력 방향 전환하기

백그라운드로 처리할 때는 주로 출력과 오류 방향 전환을 하여 실행 결과와 오류 메세지 를 파일로 저장

 

작업 목록 보기 : jobs

jobs  
기능 백그라운드 작업을 모두 보여준다. 특정 작업 번호를 지정하면 해당 작업의 정보만 보여준다.
형식 jobs [ %작업번호 ]
% 작업 번호 % 번호 : 해당 번호의 작업 정보를 출력한다.
%+ 또는 %% : 작업 순서가 +인 작업 정보를 출력한다.
%- : 작업 순서가 -인 작업 정보를 출력한다.
사용 예 jobs %1                         j obs

jobs 명령 출력 항목

항목 출력 예 의미
작업 번호 [1] 작업 번호로서 백그라운드로 실행할 때마다 순차적으로 증가한다([1], [2], [3], ...)
작업 순서 + 작업 순서를 표시한다.
+ : 가장 최근에 접근한 작업
- : +작업보다 바로 전에 접근한 작업
공백 : 그 외의 작업
상태 실행 중 작업의 상태를 표시한다.
실행중(Running) : 현재 실행중
완료된(Done) : 작업이 정상적으로 종료된다
종료됨(Terminated) : 작업이 비정상적으로 종료된다.
정지(Stopped) : 작업이 잠시 중단된다.
명령 sleep 100& 백그라운드로 실행중인 명령

작업전환하기.

명령 의미
Ctrl + z 또는 stop [ % 작업 번호 ] 포그라운드 작업을 중지한다.(종료하는것이 아니라 잠시 중단)
bg[%작업 번호] 작업 번호가 지시하는 작업을 백그라운드 작업으로 전환한다.
fg [%작업 번호] 작업 번호가 지시하는 작업을 포그라운드 작업으로 전환한다.

로그아웃 후에도 백그라운드 작업 계속 실행하기 : nohub

로그아웃 한 다음에도 작업이 완료될 때 까지 백그라우늗 작업 실행해야 할 경우 nohub 명령 사용

nohub  
기능 로그아웃 한 뒤에도 백그라운드 작업을 계속 실행한다.
형식 nohub 명령&

작업 예약

특정한 시간에 작업을 수행하도록 예약할 수 있는 두가지 방법이 있다.

정해진 시간에 한번만 수행

at  
기능 예약한 명령을 정해진 시간에 실행한다.
형식 at [ 옵션 ] 시간
옵션 -l : 현재 실행 대기 중인 명령의 전체 목록을 출력한다.(atq 명령과 동일하다)
-r 작업번호 : 현재 실행 대기 중인 명령에서 해당 작업 번호를 삭제한다(atrm과 동일)
-m : 출력 결과가 없더라도 작업이 완료되면 사용자에게 메일로 알려준다.
-f 파일 : 표준 입력 대신 실행할 명령을 파일로 지정한다.
사용 예 at -m 0730 tomorrow                 at 10:00 pm                       at 8:15 am May 30

at 명령 설치 방법 : sudo apt-get install at, sudo apt-get install mailutils

at명령을 사용하여 정해진 시간에 명령을 실행 예약 하려면, at명령 뒤에 시간을 명시하면 된다.

시간을 지정하는 방식

  • at 4pm + 3 days : 지금부터 3일 후 오후 4시에 작업을 수행한다.
  • at 10am Jul 31 : 7월 31일 오전 10시에 작업을 수행한다.
  • at 1am tomorrow : 내일 오전 1시에 작업을 수행한다.
  • at 10:00am today : 오늘 오전 10시에 작업을 수행한다.

이러한 at로 생성된 파일은 /var/spool/at 디렉터리에 저장된다.

root 사용자만 경로상의 파일을 확인이 가능하다.

 

at 작업 목록 확인하기 : -l 옵션, atq

at 명령으로 설정된 작업의 목록은 -l 옵션으로 확인이 가능하다.

atq 명령으로도 확인이 가능하다.

at 작업 삭제하기 : -d옵션, atrm

at명령으로 설정한 작업이 실행되기 전 삭제하려면 -d 옵션을 사용하고 삭제할 작업 번호를 지정한다.

at 명령 사용 제한하기.

관련 파일 : /etc/at.allow와 /etc/at.deny

정해진 시간에 반복 수행

crontab  
기능 사용자의 crontab 파일을 관리한다.
형식 crontab [-u 사용자 ID] [옵션] [파일 이름]
옵션 -e : 사용자의 crontab 파일을 편집한다.
-l : crontab 파일의 목록을 출력한다.
-r : crontab 파일을 삭제한다.
사용 예 crontab -l          crontab -u user1 -e         crontab -r

crontab 파일 생성하고 편집하기 : crontab -e

crontab 편집기는 기본적으로 VISUAL 또는 EDITOR 환경 변수에 지정된 편집기를 사용한다.

crontab -e 명령으로 편집한 파일을 저장하면 자동적으로 /var/spool/cron/crontabs 디렉터리에 사용자 이름으로 생성

crontab 명령 사용 제한하기.

 /etc/cron.allow, /etc/cron.deny 파일

cron.deny 파일은 기본적으로 있지만 cron.allow 파일은 관리자가 만들어야 함

두 파일이 적용되는 기준

  • /etc/cron.allow 파일이 있으면 이 파일 안에 있는 사용자만 crontab 명령을 사용할 수 있다.
  • /etc/cron.allow 파일이 없고 /etc/cron.deny 파일이 있으면 이 파일에 사용자 계정이 없어야 crontab 명령을 사용할 수 있다.
  • /etc/cron.allow 파일과 /etc/cron.deny 파일이 모두 없다면 시스템 관리자만 crontab 명령을 사용할 수 있다.

두 파일이 모두 없는데 일반 사용자가 crontab 명령을 사용하려고 하면, 다음과 같은 메시지가 출력된다.

 

728x90