Github avatar

GyeongSu Han's Github Pages

터미널 제어 문자 (^Z)

May 25, 2015 · Server

Ctrl + Z키를 누르게 될 경우에는 해당 프로세스를 일시 정지 하게 됩니다.

직접 확인을 해보겠습니다.

root@ubuntu:~# cat process.sh
#!/bin/bash
for i in {1..100}
do
    echo $i
    sleep 1
done

단순히 1 ~ 100까지 1초단위로 출력을 하게되는 프로그램 입니다. 이 프로그램을 실행시키는 도중 Ctrl+Z를 이용하여 중단시켜 보겠습니다.

root@ubuntu:~# ./process.sh
1
2
3
^Z
[1]+  Stopped                 ./process.sh
root@ubuntu:~#

이렇게 프로세스를 Stopped 상태로 변경시키게 되었습니다. 이 상태에서 fgbg명령을 이용하여 해당 프로세스를 어떠한 형태로 실행시킬지 선택하게 됩니다.

fg(ForeGround)를 사용하게 되면 프로세스를 다시 제어하는 상태로 변경하게 됩니다. 제어하는 상태는 이 상태에서 명령을 입력할 수 있는 상태를 말합니다.

그럼 fg를 사용해 보겠습니다.

root@ubuntu:~# ./process.sh
1
2
3
^Z
[1]+  Stopped                 ./process.sh
root@ubuntu:~# fg
./process.sh
4
5
6
^Z
[1]+  Stopped                 ./process.sh
root@ubuntu:~#

이런 식으로 fg를 사용하게 되면 멈추어 있던 프로세스를 다시 되돌리게 됩니다.

그럼 이번에는 bg명령을 사용해 보겠습니다.

bg(BackGround)를 사용하게 되면 프로세스를 다시 실행시키지만, 제어할 수 있는 상태로 변경은 되지 않습니다. 단순히 뒤에서 실행되고 있기 때문에, 실행 결과(출력결과, 파일 생성 등…)은 정상적으로 이루어 지게 되지만 제어를 할 수 있는 상태는 아니게 됩니다.

background프로세스의 대표적인 예로는 데몬프로그램(ex. httpd, sshd, telnetd등 이름이 d(deamon)로 끝나고, 서비스를 제공해주는 프로그램)등이 있습니다.

그럼 bg를 사용해 보겠습니다.

root@ubuntu:~# bg
[1]+ ./process.sh &
root@ubuntu:~# 7
8
9
cat process.sh
#!/bin/bash
for i in {1..100}
do
    echo $i
    sleep
done
root@ubuntu:~# 10
11
12
13
14
15
16
fg17
18
./process.sh
19
^Z
[1]+  Stopped                 ./process.sh
root@ubuntu:~#

여기서 보아야 할 점은 2번줄과 12번줄 입니다. root@ubuntu:~# 으로 명령을 기다리는 상태가 되었습니다.

현재 프로그램이 실행되고 있는데, 그와 별개로 추가적인 쉘 명령을 기다리고 있다는 것은 이 상태에서 추가 명령을 할 수 있다는 것 입니다.

9
cat process.sh
#!/bin/bash
for i in {1..100}
do
    echo $i
    sleep 1
done
root@ubuntu:~# 10

5번줄에서 cat process.sh를 하여 명령을 실행시켜 보았습니다. 프로세스가 실행되고 있는 상태이지만, cat명령이 잘 작동하였습니다. cat이 실행되고, 4번줄에 9가 출력되었는데 그 다음 숫자인 10이 12번줄에 출력된 것으로 보아 정상적으로 실행 중인 것을 알수 있습니다. 이것을 보고 컨트롤 할수 있는 공간과 컨트롤 하지 못하는 공간이 존재한다고 추측할 수 있습니다. (그냥 개인적인 생각입니다. 자세히는 몰라요 ㅎㅎ.)

이제 bg모드인 프로그램을 fg로 돌리는 방법은 fg명령을 실행하면 됩니다.

root@ubuntu:~# 10
11
12
13
14
15
16
fg17
18
./process.sh
19
^Z
[1]+  Stopped                 ./process.sh
root@ubuntu:~#

fg명령어를 실행시켜도 출력되는 부분은 변화가 없는데, bg에서도 정상적으로 출력이 되고 있던 상황이기 때문에 인지하지 못한 것 같습니다.

하지만 bg모드에서는 Ctrl + Z등 명령을 수행할 수 없는 상태인데, fg를 실행시킨 후 Ctrl + Z를 하게되면 ^Z과 같이 정상적으로 이루어 지는 것을 볼 수 있습니다.