프로세스 관리 도구 - top
top [option]
주기적으로 현재 실행중인 프로세스에 대한 정보 출력 - 솔라리스 11부터 기본 패키지로 탑재
자세한 요약 정보 출력
Foreground & Background
작업(job)
쉘이 프로세스를 관리하는 단위, 쉘은 job을 시작시키고 제어(job ID)부여.
유닉스의 프로세스는 포그라운드 작업과 백그라운드 작업으로 구분가능
Foreground 처리
사용자가 입력한 명령이 실행되어 결과가 출력될 때 까지 프롬프트가 출력되지 않아 다른 명령을 입력할 수 없는 처리 방법
* 보통의 처리 방법
$ find / -name passwd
Backgounrd 처리
명령의 입력이 끝나면 결과에 상관없이 바로 다음 프롬프트가 출력되어 다른 명령을 입력할 수 있는 처리 방법
*명령의 끝에 &를 붙인다.
$ find / -name passwd &
[1] 5699
$
작업제어 명령 - jobs
jobs [%작업번호]
항목 | 출력 예제 | 의미 |
작업 번호 | [1] | 백그라운드 실행이 될 때마다 1씩 증가 |
작업 순서 | +, - | 작업순서를 표시 +: 가장 최근에 접근한 작업 -: + 작업보다 바로 전에 접근한 작업 공백: 그 외의 작업 |
상태 | 실행중 | 작업의 상태를 표시 실행중: 현재 실행중 완료됨: 작업이 정상적으로 종료 종료됨: 작업이 비정상적으로 종료 정지: 작업이 잠시 중단됨 |
명령 | sleep 100& | 실행중인 명령 |
작업 번호를 지정하지 않으면 백그라운드 작업을 모두 출력, 특정 작업번호를 지정하면 해당 작업의 정보만 출력.
작업번호
- %번호: 해당 번호의 작업 정보를 출력
- %+ or %%: 작업순서가 +인 작업 정보를 출력
- %-: 작업 순서가 -인 작업 정보를 출력
작업 전환 및 종료 명령
명령 | 기능 |
bg [%작업번호] | 현재 작업이나 특정 작업을 백그라운드로 전환시켜 실행 |
fg [%작업번호] | 현재 작업이나 특정 작업을 포그라운드로 전환시켜 실행 |
Ctrl + z | 포그라운드 작업을 중지시키고, 백그라운드의 중지된 목록으로 보냄 |
Ctrl + c | 포그라운드에서 수행중인 작업을 중지 |
kill %n | 작업번호가 n인 작업을 종료 |
작업제어 명령 - nohup
nohup 백그라운드 명령
로그아웃한 다음에도 지정한 백그라운드 작업이 실행완료되도록 해야 할 때 사용 - 원래는 로그아웃하면 모든 작업 종료.
명령 실행결과와 오류메세지: ./nohup.out파일에 저장
$ nohup find / -name passwd &
[1] 1411
$ Sending output to nohup.out
실습1(프로세스)
1. 다음 쉘 프로그램 hello를 작성하여 실행하시오.
#!/bin/bash
#hello
while true
do
echo "Hello World"
sleep 2
done
2. 다른 터미널에서 위의 프로세스를 확인하시오.
ps -u 1236 -f
UID PID PPID C STIME TTY TIME CMD
2021211+ 1151716 1149097 0 14:38 pts/596 00:00:00 /bin/bash ./hello
2021211+ 1151717 1151716 0 14:38 pts/596 00:00:00 sleep 2
./hello가 sleep2의 부모 프로세스
3. sleep 2를 sleep 300으로 수정한 후 다시 실행
3-1. kill 명령으로 hello 프로세스 종료시킴
kill 1151716
3-2. sleep 프로세스는 여전히 존재하는가? 존재한다면 이 프로세스의 부모는 누구인가?
ps -u 1236 -f
UID PID PPID C STIME TTY TIME CMD
2021211+ 1151717 1 0 14:38 pts/596 00:00:00 sleep 300
부모는 ./hello였지만 고아 프로세스가 되었다.실습2(Foreground, Background)
1. 이전 실습에서 작성한 hello 프로그램 sleep 10으로 수정 후 실행
Ctrl + C로 수행을 종료한다.
2. 이번엔 hello 프로그램을 background로 실행
./hello &
2-1. 작업 목록 확인
ps -u 1236 -f
UID PID PPID C STIME TTY TIME CMD
2021211+ 1152440 1149097 0 14:45 pts/596 00:00:00 /bin/bash ./hello
2021211+ 1152441 1152440 0 14:45 pts/596 00:00:00 sleep 10
2-3. 수행시킨 hello 종료
kill 1152440 해도 종료가 안된다. Ctrl + C로 종료하거나, kill %1을 해서 작업을 종료시킨다.
실습3(작업 전환 및 상태 확인)
1. 다음 명령을 background로 실행 sleep 300 &
1-1. 작업 목록 확인
ps -u 1236 -f
2021211+ 1153638 1153408 0 14:56 pts/596 00:00:00 sleep 300
1-2. 위 작업을 foreground로 전환
fg %1
sleep 300
^Z
[1]+ 멈춤 sleep 300
1-3. 위 작업의 수행을 종료
kill %1
[1]+ 종료됨 sleep 300
2. 다음 명령을 foreground로 수행 sleep 300
2-1. 위 작업을 일시 정지
sleep 300
^z
[1]+ 멈춤 sleep 300
2-2. 작업 상태 확인
ps -u 1236 -f
2021211+ 115402bg %18 1153505 0 15:00 pts/598 00:00:00 sleep 300
2-3. 정지된 작업을 background로 전환
bg %1
[1]+ sleep 300 &
2-4. 작업을 종료시킴
kill %1
실습4(작업과 프로세스)
1. 다음 명령을 수행 (sleep 60 ; echo Hello) &
1-1. 작업목록 확인
[1] 1154421
1-1. 프로세스 목록 확인
ps -u 1236 -f
2021211+ 1154422 1154421 0 15:04 pts/596 00:00:00 sleep 60
1-2. 잠시후 화면에 출력되는 내용은?
Hello
2. 다시 다음 명령을 수행 (sleep 60 ; Hello) &
작업의 수행을 종료
kill %2
3. 다시 (sleep 60 ; Hello) & 수행
3-1. sleep 프로세스만 종료(pid값 이용). 어떤 결과가 나오는가?
kill 1154773
종료됨
Hello
실습5(작업 상태)
다음 명령을 수행 sleep 300
1. 작업을 일시 정지시킴
Ctrl + Z
2. 작업의 현재 상태는?
[1]+ 멈춤 sleep 300
3. 작업을 종료시킴
kill %1
다시 명령을 수행 sleep 300&
1. 작업의 현재 상태는?
[2] 1155151
[1] 종료됨 sleep 300
2. 작업을 시그널을 이용해 일시정지시킴
kill -SIGSTOP 1155151
[2]+ 실행중
3. 작업으 시그널을 이용해 다시 재개함
kill -SIGCONT 1155151
다음 명령을 수행 (sleep 60 ; Hello)
1. 시그널을 이용해 일시정지
kill -SIGSTOP 1156238 부모 프로세스를 정지해야 정지된다.
2. 작업의 현재 상태는?
[1]+ 멈춤 (sleep 60; echo Hell0)
3. 시그널을 이용해 작업을 다시 재개한다.
kill -SIGCONT 1156238
4. 작업의 현재 상태는?
[1]+ 실행중 (sleep 60; echo Hello)&
5. Hello 출력은 언제 나오는가?
60초 지나고 나온다.
실습6(nohup)
1. 다음과 같은 일을 수행하는 쉘 프로그램 checkwho를 작성하여 테스트하시오
로그인되어있는 사용자 수를 다음과 같은 형식으로 60초 간격으로 출력
#!/bin/bash
while true
do
echo $(date "+%Y/%m/%d %H:%M") 로그인 사용자 수는 $(who | wc -l)명
sleep 60
done
2. nohup 명령을 이용하여 checkwho가 로그아웃 상태에서도 계속 실행되도록 하시오.
nohup ./checkwho &
[1]1159397
1. 다시 로그인 했을 때 여전히 실행중인가?
여전히 실행중이다. 백그라운드에서 계속 실행되고 있다.
cat nohup.out 파일을 보면 추가되고 있는게 보인다.
2. 작업 목록에서 확인할 수 있는가?
[1]+ 멈춤 ./checkwho
3. 프로세스 목록에서 확인할 수 있는가?
ps -u 1236 -f
2021211+ 1159318 1153408 0 15:29 pts/596 00:00:00 /bin/bash ./checkwho
2021211+ 1159397 1153505 0 15:30 pts/598 00:00:00 /bin/bash ./checkwho
2021211+ 1159505 1159397 0 15:31 pts/598 00:00:00 sleep 60
2021211+ 1159532 1159318 0 15:31 pts/596 00:00:00 sleep 60
4. 출력 결과는 어디에서 확인할 수 있는가?
cat nohup.out
2023/06/11 +15:30 로그인 사용자 수는 8명
2023/06/11 +15:31 로그인 사용자 수는 8명
2023/06/11 +15:32 로그인 사용자 수는 8명
5. 관련 프로세스를 종료시키시오.
ps -u 1236 -f
UID PID PPID C STIME TTY TIME CMD
2021211+ 1153407 1153398 0 14:55 ? 00:00:00 sshd: 202121165@pts/596
2021211+ 1153408 1153407 0 14:55 pts/596 00:00:00 -bash
2021211+ 1153504 1153401 0 14:55 ? 00:00:00 sshd: 202121165@pts/598
2021211+ 1153505 1153504 0 14:55 pts/598 00:00:00 -bash
2021211+ 1160507 1153505 0 15:41 pts/598 00:00:00 ps -u 1236 -f
202121165@cslinux2:~$
'UNIX 시스템' 카테고리의 다른 글
System Administration - 15주차 수업 - 1 (0) | 2023.06.16 |
---|---|
usermod - 15주차 수업 - 2 (0) | 2023.06.16 |
Process Management - 14주차 수업 - 1 (0) | 2023.06.11 |
Function - 13주차 수업 - 2 (0) | 2023.06.02 |
조건식 / 프로그램 인자 - 13주차 - 1 (0) | 2023.06.02 |