Raspberry Pi_Kor_10.7.3 프로그램 background/foreground 실행


Published Book on Amazon


All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1

All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)

최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


10.7.3  프로그램 background/foreground 실행  

 

통상 우리가 명령을 실행할 때는 하나의 명령이 완료되면 다음 명령을 실행하는 방식으로 작업을 진행해 간다. 이렇게 진행하는 방식을 우리는 foreground방식이라고 한다. 이 방식에서는 하나의 작업을 진행하는 도중에는 다른 명령을 입력할 수가 없다. Pi 시스템에서는 특별한 지시를 하지 않으면, 항상 foreground 방식으로 명령을 실행하게 된다.

 

시스템에서 실행하는 작업 중에는 짧은 시간에 종료되는 것도 있지만, 작업시간이 꽤 오래 걸리는 작업이 있을 수도 있다. 이렇게 오래 걸리는 작업이 있는 경우, 그 작업이 완료된 이후에 다른 작업을 시작할 수도 있지만, 다음에 하고자 하는 작업이 현재 진행중인 작업과 연관관계가 없는 경우, 현재 작업이 완료되는 것을 기다리지 않고, 곧바로 작업을 시작할 수도 있다.

 

10.7.3.1    "&" 명령 - background 처리

 

현재 진행 중인 작업이 완료되지 않은 상태에서 다음 명령을 실행하기 위해서 사용하는 방법이 앞의 명령을 background에서 실행하는 것이다. 이렇게 background에서 명령을 실행하면, 해당 Terminal 화면에서는 곧바로 다음 명령을 실행할 수 있는 상태가 된다.

 

이렇게 background에 작업을 실행하기 위해서는 해당 명령 뒤에 & 명령을 붙여서 사용한다.

 

[명령 형식]

exec-command  &   [ exec-command ]

 

[명령 개요]

    이 명령 앞에 지정된 명령을 background에서 실행시킨다

    user 권한    -- 일반 user.

 

[상세 설명]

특정작업을 background로 실행을 하면 화면에는 그 작업에 대한 PID(Process ID)가 표시된 후 다음 작업을 할 수 있는 상태로 전환한다. PID는 해당 작업을 가리키는 고유번호가 된다.


 

background 작업의 결과에 대한 출력은 그 작업이 완료되는 시점에 출력되는데, 보통의 작업과 동일한 방식으로 출력으로 표시된다

 

[사용 Example]

다음과 같은 "man" 명령을 예로 사용할 것이다. "man" 명령으로 어떤 명령에 대한 도움말을 볼 수 있는데, 도움말은 프로그램 실행과 동시에 곧바로 화면에 나온다. 여기서는 "mkdir" 명령에 대한 도움말을 보는 작업을 할 것인데, background로 작업을 실행해 볼 것이다.

 

pi@raspberrypi ~/testdata $ man mkdir &

 [5] 10914

pi@raspberrypi ~/testdata $

 

그러면 화면에는 background로 실행되는 작업에 대한 PID(Process ID)를 표시하고는 곧바로 다음 명령을 입력할 수 있는 상태가 된다.

 

여기서 이제 다른 명령을 실행해 보겠다. 그러면 정상적인 처리 결과가 화면에 표시된다.

 

pi@raspberrypi ~/testdata $ ls -l

total 24

-rw-r--r-- 1 pi pi   62 Apr 23 13:06 customer_list.txt

-rw-r--r-- 1 pi pi  123 Apr 23 13:00 customer_product.txt

drwxr-xr-x 4 pi pi 4096 Apr 25 07:56 TestFolder01

drwxr-xr-x 2 pi pi 4096 Apr 10 13:32 TestFolder02

drwxr-xr-x 2 pi pi 4096 Apr 25 08:11 TestFolder03

-rw-rw---- 1 pi pi  113 Apr 23 08:22 user_guide01.txt

 

 


 

10.7.3.2    "jobs" 명령 - 현재 background 작업 상태 보기

 

현재 실행중인 background 작업 목록들과 각각의 작업에 대한 상태를 조회하기 위해서는 "jobs" 명령을 사용한다.

 

[명령 형식]

jobs

 

[명령 개요]

    현재 실행중인 background 작업목록에 대한 정보를 보여준다.

    user 권한    -- 일반 user.

 

[상세 설명]

    None

 

[사용 Example

다음은 "man" 명령을 background로 실행한 다음, background 작업의 상태를 조회해 본 것이다.

 

pi@raspberrypi ~/testdata $ man mkdir &

[3] 2472

pi@raspberrypi ~/testdata $ jobs

[1]+  Stopped                 vi

[2]+  Stopped                 python3

[3]+  Stopped                 man mkdir

 

위의 내용을 보면 처음에 작업번호가 "[n]"형식으로 표시되어 있고, 어떤 작업인지에 대한 내용이 뒤에 표시되어 있다.

 

 

 


 

10.7.3.3    Foreground 작업을 Background로 옮기기

 

현재 foreground에서 실행되고 있는 작업이 금방 끝날 것이라고 예상하고 실행했지만, 시간이 지나도 끝나지 않을 때가 있다. 이런 경우 현재 실행되는 작업을 background로 돌리고, foreground에서는 다른 작업을 실행하고자 하면, [Ctrl + Z] 버튼을 눌러서 현재 foreground 작업을 background로 전환할 수 있다. 그러면 background로 전환된 작업은 일단 멈춤 상태로 대기하고 있다

 

[사용 Example]

foreground에서 "man mkdir" 명령을 실행한 상태에서 [Ctrl + Z] 버튼을 누르면 해당 작업이 background로 전환되고 foreground에는 새로운 명령을 입력할 수 있는 상태로 된다.

 

pi@raspberrypi ~/testdata $ man mkdir

 

pi@raspberrypi ~/testdata $  

 

pi@raspberrypi ~/testdata $ jobs

[1]+  Stopped                 vi

[2]+  Stopped                 python3

[3]+  Stopped                 man mkdir

 


 

10.7.3.4    "fg" 명령 - background 작업 foreground로 전환하기

 

background 작업이 실행되는 중에서 fg 명령을 사용하면 background에서 실행되던 작업이 foreground 상태로 변경된다.

 

[명령 형식]

fg

 

[명령 개요]

    background에서 실행되던 작업을 foreground 상태로 변경한다.

    user 권한    -- 일반 user.

 

[상세 설명]

background로 작업하는 것은 중급 이상의 사용자가 아니면 작업을 관리하는 것이 어렵고, 또한 사용하는 것이 쉽지 않다. 그래서 background 작업과 동일한 효과를 얻을 수 있는, 보다 이해하기 쉬운 방법은 새로운 Terminal 화면을 열어서 각각 별도로 작업을 하는 것이다

 

[사용 Example]

"man" 명령을 background로 작업을 실행해 볼 것이다. 그러면 화면에는 background로 실행되는 작업에 대한 PID(Process ID)를 표시하고는 곧바로 다음 명령을 입력할 수 있는 상태가 된다.

 

pi@raspberrypi ~/testdata $ man mkdir &

 [5] 10914

pi@raspberrypi ~/testdata $


 

이제 "fg" 명령을 사용하여 background로 작업 중이던 프로그램을 foreground로 전환해 보자. 그러면 background로 작업 중이던 "man" 명령이 foreground로 전환되면서 작업화면이 다음과 같이 나타난다.

 

pi@raspberrypi ~/testdata $ fg


 

 

 


 

10.7.3.5    "bg" 명령 - 중단된 background 작업 다시 실행하기

 

[명령 형식]

bg %n

 

[명령 개요]

    background에서 중단된 작업을 다시 실행한다

    user 권한    -- 일반 user.

 

[상세 설명]

작업을 실행할 때는 해당 작업에 대해 시스템이 지정한 작업 ID 번호를 지정해야 한다. 이 번호는 "jobs" 명령을 실행하면 해당 값을 확인할 수 있다.

 

[사용 Example]

 

pi@raspberrypi ~/testdata $ jobs

[1]+  Stopped                 vi

[2]+  Stopped                 python3

[3]+  Stopped                 man mkdir

pi@raspberrypi ~/testdata $  bg %3

 

 

 

10.7.3.6    background 실행 작업을 중지 상태로 만들기

 

background에서 실행되고 있는 작업을 바로 중지시킬 수 없다. 작업을 중단하고자 하면 해당 작업을 먼저 foreground로 전환한 다음, 다시 Ctrl + Z를 누르면 background 에서 중지 상태로 만들 수 있다.

 


 

10.7.3.7    "kill" 명령 - 작업 끝내기

 

작업을 끝내거나 죽이기 위해서는 'kill' 명령어를 사용한다.  이 명령어는 프로세스를 끝내기 위해서도 사용하는 명령어인데 전달되는 매개변수에 의해 어떤 행동을 할지 결정됩니다.

 

[명령 형식]

kill %n

 

[명령 개요]

    실행중인 process를 종료시킨다

    user 권한    -- 일반 user.

 

[상세 설명]

명령을 실행할 때 반드시 '%' job 번호와 함께 지정해야 한다. 이것을 생략하고 그냥 "kill 1" 또는 "kill 2"으로 입력하면 PID 1 'init'이나 PID 2 'kthread'를 종료하게 되는데, 이는 전혀 다른 시스템 프로그램으로 컴퓨터를 재부팅해야 할 수도 있습니다.

 

 

 

 

 

 


 

Leave a Reply