요약
00 개요
01 프로세스의 개념
02 프로세스 관리 명령
03 포그라운드ㆍ백그라운드 프로세스와 작업 제어
04 작업 예약
연습문제
#--- <Unix Option> ---#
# 유닉스 옵션 : 묶어서 사용할 수 있고, - 으로 시작한다.
ps # 현재 터미널에서 실행중인 (현재 로그인된 사용자의) 모든 프로세스 정보 출력
ps -e # 시스템 전체의 모든 프로세스 정보 출력
ps -f # 프로세스 상세 정보를 출력하기. <full format> (PPID, CPU 사용량, 시작시간 등)
ps -u tmskim # 특정 사용자에 대한 모든 프로세스의 정보를 출력한다. <user format>
ps -p 1234 # pid로 지정한 특정 프로세스의 정보를 출력한다.
#--- <BSD Option> ---#
# BSD 옵션 : 묶어서 사용할 수 있고, - 으로 시작하지 않는다.
ps a # 백그라운드 프로세스를 포함한 터미널 세션에 연결되어 있는 모든 프로세스의 정보를 출력한다. <all process>
ps u # 프로세스 소유자 이름, CPU 사용량, 메모리 사용량 등 상세 정보 출력
ps x # 현재 터미널 세션에 연결되어있지 않은 프로세스까지 모든 프로세스의 정보 출력 <auxiliary>
#--- <GNU Option> ---#
# GNU 옵션 : -- 두 개로 시작한다.
ps --pid PID 목록 # 목록으로 지정한 특정 PID 정보를 출력한다.
#--- <사용예> ---#
ps
ps -ef
ps aux
현재 단말기의 프로세스 목록 출력하기 : ps

프로세스 상세 정보 출력하기 : ps -f
PPID 와 C(CPU 사용량), 시작 시간 등의 정보가 추가로 출력


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


터미널에서 실행시킨 프로세스 상세 정보 출력하기 : ps au

전체 프로세스 목록 출력하기 (유닉스 옵션) : ps -ef | more

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

전체 프로세스 목록 출력하기 (BSD 옵션) : ps aux | more

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

특정 사용자의 프로세스의 더욱 상세한 정보를 목록으로보기 : ps -fu user1

특정 프로세스 정보 출력하기 : ps -p 1584

특정 프로세스 정보 검색하기 : ps -ef | grep bash
ps -ef | grep 명령 의 형태로 연결해서 사용
pgrep # ps 와 grep 합친것
pgrep -x bash # 정확하게 bash 라고 하는것의 pid 출력
pgrep -l bash # pid 와 명령 이름을 출력
#---<뒤에것 먼저 실행하고 그 결과를 앞의 명령어에 적용>---#
ps -fp $(grep -x bash) # pgrep 과 ps 명령을 연결하면 자세한 정보 검색 가능
ps -fp $(grep -u user1 bash) # -u 옵션으로 사용자명을 지정하면 해당 사용자의 프로세스 정보만 검색

kill [-시그널] PID # 지정한 시그널을 프로세스에게 보낸다.
kill -l # 이 시스템에서 정의를 해놓은 64 개의 시그널 리스트를 보여줌
kill 1234 # PID 가 1234 인 프로세스에게 SIGTERM(15)을 보냄. 종료
kill -9 1234 # PID 가 1234 인 프로세스에게 SIGKILL(9)을 보냄. 종료
-1 SIGHUP # 터미널과 연결이 끊어졌을 떄 발생. 모든 child process 종료
-2 SIGINT # 인터럽트로 사용자가 ctrl + c 입력시 발생, 종료
-9 SIGKILL # 이 시그널을 받은 프로세스는 무시할 수 없으며 강제 종료된다.
-15 SIGTERM # kill 명령이 보내는 기본 시그널, 소프트웨어 종료 시그널, 무시할 수 있음
# -> 프로세스와 관련된 팦일들을 정리하고 종료한다. 종료되지 않은 프로세스가 있을 수 있다.
-18 SIGCOUNT # STOP 시그널 이후 계속 진행할 때 사용
-19 SIGSTOP # ctrl + z
#=== 프로세스 종료 예 ===#
#---[1번 터미널]---#
man ps # man 이라고 하는 프로세스 실행
#---[2번 터미널]---#
ps -fp $(pgrep -x man) # man 이라는 프로세스의 pid 를 가지고 ps -fp 에 의해서 상세정보를 출력
kil 2290 # pid 로 SIGTERM 이라는 시그널을 보내 프로세스 종료
pkill [-시그널] PID # PID 가 아니라 프로세스의 명령 이름으로 프로세스를 찾아 종료
pkill man # man 이라는 이름의 프로세스를 찾아 종료
pkill -9 sleep # sleep 이름을 가진 모든 프로세스를 찾아 9를 보냄
killall sleep # 해당 이름으로 실행중인 모든 프로세스를 한 번에 종료
top # 현재 실행중인 프로세스에 대한 정보를 주기적으로 보여주고,
# vi 처럼 내가 종료하기 전까지 계속 실행 -> 5초 마다 업데이트
# 이런 명령어가 있다 정도
& 기호를 추가# 포그라운드 -> sleep 명령이 끝날떄까지 기다려야한다
sleep 100
# 백그라운드 -> 프롬프트가 바로 나와 다른 명령을 실행시킬 수 있다.
sleep 100 &
jobs # [현재 계정 + 현재 터미널]의 백그라운드 프로세스 출력
jobs %1 # 백그라운드로 실행중인 작업번호 1번 프로세스 출력
jobs $+ 또는 %% # 작업 순서가 + 인 작업 정보를 출력 (+ : 가장 최근에 접근한 작업)
jobs %- # 작업 순서가 - 인 작업 정보를 출력 (- : + 작업 바로 전 접근한 작업, 공백 : 그 외의 작업)

# 작업 전환하기
ctel + z # 포그라운드로 실행중인 프로세스 stop
fg # 백그라운드 프로세스 중 작업 순서가 + 인 프로세스를 포그라운드로 전환
fg %2 # 작업번호가 2번인 프로세스를 포그라운드 작업으로 전환
bg # 포그라운드 프로세스 중 작업 순서가 + 인 프로세스를 백그라운드로 전환
bg %1 # 작업 번호가 3번인 프로세스를 백그라운드 프로세스로 전환
sleep 100 # 포그라운드로 실행 -> 1번
ctrl + z # STOP
bg %1 # 백그라운드로 전환 -> 재실행
fg # 바로 직전에 접근한 프로세스를 포그라운드로 전환
# 작업 종료하기
sleep 100
ctrl + c # 포그라운드 작업은 ctrl+c 를 입력하면 대부분 종료하거나, PID 를 검색해서 kill 명령어로 강제종료
sleep 100 &
kill %1 # 백그라운드 작업은 kill %1 명령으로 강제종료


nohup 명령을 사용nohup 명령&
# 즉 위 명령어는 내가 터미널을 종료했음에도 불구하고 백그라운드 프로세스가 종료도지 않고 계속 실행되도록 해주는 명령어
nohup find / -name passwd &
# 터미널이 종료가 되어도 그 프로세스는 즉 이 명령어는 계속 실행이 된다.
# 기본적으로 nohup.out 파일에 실행 결과 저장
# 실행 결과를 pw.dat 에 저장하고, 에러메세지도 이 파일(&1) 에 백그라운드로 저장한다
nohup find / -name passwd > pw.dat 2>&1 &
atat [옵션] [시간]### 시간 설정 방식
at 4pm + 3days # 지금부터 3일 후 오후 4시에 작업을 수행
at 10am jul 31 # 7월 31일 오전 10시에 작업을 수행
at 1am tommorrow # 내일 오전 1시에 작업을 수행
at 10:00am today # 오늘 오전 10시에 작업을 수행
### at 명령 설정 예
at 04:30 pm # 시간 지정한 후
at> /usr/bin/ls -l ~user1 > ~user1/at.out # 프롬프트가 뜨고 실행할 명령을 지정
at> <EOT> # ctrl + d 로 명령어 입력 종료 -> 작업 예약 완료
at 00:00 14-09-26 -f ./a.sh #2014 09 26 00:00 a.sh 실행
at 00:00 2014-09-26 -f ./a.sh #2014 09 26 00:00 a.sh 실행
# -f 옵션 : 표준 입력 대신 실행할 명령을 파일로 지정하여
# -> 특정한 시간에 그 파일을 수행하게끔
### at 작업 파일 확인하기
# at 으로 생생된 작업 파일은 /var/spool/cron/atjobs 디렉토리에 저장.
# 작업 번호로 파일이 생성
# atjobs 디렉토리의 내용은 daemon 그룹의 사용자만 확인 가능하므로 sudo 명령을 사용
sudo ls -l /var/spool/cron/atjobs # 결과 : 합계 4
at -l # 예약된 작업 확인
atq # 현재 사용자의 at 작업들을 보여준다.
sudo atq # 슈퍼 유저일 경우 모든 사용자의 작업 목록을 보여준다.
at -d 3 # 3번 작업 삭제
atrm 19 # 19번 작업 삭제
crontabcrontab [-u 사용자 ID] [옵션] [파일명]-e : 사용자의 crontab 파일을 편집한다. (e 로 들어가서 라인을 들어가면 되기 떄문에 -r 옵션을 잘 사용하지 x)-l : crontab 파일의 목록을 출력한다.-r: crontab 파일을 삭제한다.crontab -u user1 -e
# user1 의 crontab 을 수정한다.* * * * * 분(0-59), 시간(0-23), 일(1-31), 월(1-12), 요일(0-7) //일~일 순서.(0,7:일요일)
30 23 1 * * : 매월 1일날 23 시 30 분에 이 작업을 수행하라. * * * * 0 : 매주 일요일날 매 분 수행 0,5,10,15 * * * * */5로 표현하기도함.*/2 : 2시간 마다.crontab -e # 텍스트 에디터로 crontab 을 연다(많이 사용)
# /var/spool/cron/crontabs -> crontab 파일 확인, 사용자 이름으로 생성
crontab -l # crontab 파일 내용 확인하기
crontab -r # crontab 으로 만든 모든 내용을 삭제
# crontab -e 옵션으로 -r 옵션을 쓰면 예약된 작업이 전부 삭제갇 되기 때문에 자 쓰지 않음
### docs 파일
$ crontab -e //텍스트 에디터로 crontab을 연다 (많이 사용)
$ crontab -l //현재 계정의 crontab을 보여준다 (/var/spool/cron/root 파일내용과 동일)
$ crontab -r //현재 계정의 crontab을 지운다
<crontab의 주기 설정>- 중요
반복 실행 : 0,10,20 * * * * [script] //매일 매시간 0분,10분,20분에 명령어 실행.
범위 실행 : 15-30 1 * * * [script] //매일 1시 15분 부터 30분까지 명령어 실행. (1분 주기로)
간격 실행 : */10 * * * * [script] //매 10분마다 명령어 실행.
*/10 4,5,6 16 * * echo “happy birthday” >> /home/Minjun/test.txt
//매달 16일 4,5,6 시에 10분간격으로 happy birthday 를 test.txt에 append.
> cron의 처리 내용을 저장하고 싶을때 (=로그를 남기고 싶을때)
* * * * * /home/Minjun/test.sh >> /home/Minjun/test.sh.log 2> &1
// 매분마다 test.sh 실행하고 결과를 test.sh.log 에 저장.
// 에러출력은 file discriptor가 1인 표준출력을 하는 곳에 출력.
* * * * * /home/Minjun/test.sh > /dev/null 2> /dev/null //log와 오류내역을 저장x 싶을때.
> crontab에 저장한 내용을 주기적으로 백업해주고 싶을때
ex) 매일 오후 11시 50분에 crontab의 내용을 백업해주고 싶다 :
50 23 * * *crontab -l > /home/Minjun/crontab_backup.txt