OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] ForeGround(포어 그라운드), BackGround(백 그라운드) 프로세스, 작업 제어,작업 전환 - jobs, nohup(로그아웃 후에도 BackGround 작업 계속 실행)

주누다 2015. 3. 17. 22:59
반응형



ForeGround(포어 그라운드) 작업

 - 사용자가 입력한 결과가 출력할 때까지 대기(프롬프트가 출력되지 않음)

- 한 터미널에서 한 번에 하나의 프로세스만 실행 가능

- 동시에 여러 개의 프로세스를 실행할 수 없음



BackGround(백 그라운드) 작업

 - 작업 제어(Job Control)가 제공

- ForeGround 프로세스가 실행되는 동안 뒤에서 BackGround 프로세스가 실행될 수 있으므로

 한 터미널에서 여러 개의 프로세스를 동시에 실행 가능.

- BackGround 방식으로 명령 실행시, 명령의 처리가 끝나는 것과 관계없이 

 곧바로 프롬프트가 출력되어 다른 작업을 계속 할 수 있음.

- BackGround 작업은 명령의 실행 시간이 많이 걸릴 것으로 예상되는 명령을 실행한 후

 다른 작업을 할 때 용이.



BackGround 작업과 출력 방향 전환

 - BackGround 작업은 실행이 끝나면 현재 터미널에서 무엇을 하든 상관없이

 결과가 그대로 화면에 출력

- 기존 작업 화면과 백그라운드 작업 결과가 섞여 제대로 확인을 할 수 없는 경우가 생김.

- BackGround 작업 처리기 출력, 오류 방향을 전환하여

 실행 결과 및 오류 메시지를 파일로 저장하는 방법을 많이 사용.


- 명령을 백그라운드로 실행하려면 명령의 마지막에 '&(앰퍼샌드)' 기호를 추가

user@ubunutu:~$ sleep 50&

[1] 4932

user@ubunutu:~$


참조(입출력 처리 관련) : http://sharkmino.tistory.com/1487



작업 제어(Job Control)

 - 한 터미널에서 여러 프로세스를 실행, 관리

- C 쉘에서 처음 개발

- 작업 제어 도구가 관리하는 프로세스들을 jobs라고 함.

- 작업 전환과 작업 일시 중지, 작업 종료를 뜻함.


- 작업 전환 : BackGround -> ForeGround, ForeGround -> BackGround

- 작업 일시 중지 : 작업 일시 중단

- 작업 종료 : 작업 종료

- 'jobs' 명령으로 작업 목록 확인 가능.

jobs - 작업 목록 확인

- 현재 실행중인 BackGround 작업을 보는 명령

- 'jobs' 배시 쉘의 내부 명령


- 기능 : 백그라운드 작업을 모두 보여줌. 특정 작업 번호 지정시 해당 작업의 정보만 확인할 수 있음

- 형식 : josb [%작업 번호]

- %작업 번호 :

 => %번호 : 해당 번호의 작업 정보 출력

 => %+ 또는 %% : 작업 순서가 '+'인 작업 정보 출력

 => %- : 작업 순서가 '-'인 작업 정보 출력


사용 예 : jobs %1, jobs


user@ubuntu:~$ jobs

[1]- 실행중   sleep 50 &

[2]+ 실행중   find / -name passwd > pw_back.dat 2>&1 &

user@ubunutu:~$

 항목

 출력 예

 의미

 작업 번호

 [1]

 작업 번호.

백그라운드로 실행될 때마다 순차적으로 증가

 작업 순서

 +

 작업순서

- '+' : 가장 최근에 접근한 작업

- '-' : '+' 작업보다 바로 전에 접근한 작업

- 공백 : 그 외 작업

 상태

 실행 중

 작업상태

- '실행중(Running)' : 현재 실행 중

- '완료됨(Done)' : 작업이 정상적으로 종료

- '종료됨(Terminated)' : 작업이 비정상적으로 종료

- '정지됨(Stopped)' : 작업이 잠시 중단

 명령

 slepp 50 &

 BackGround로 실행중인 명령



작업 전환 명령

 명령

 의미

 Ctrl + z 또는 stop [%작업번호]

 ForeGround 작업을 중지(종료하는 것이 아닌 '잠시 중단')

 bg [%작업 번호]

 작업 번호가 지시하는 작업을 BackGround 작업으로 전환

 fg [%작업 번호]

 작업 번호가 지시하는 작업을 ForeGround 작업으로 전환


- 작업 전환을 하려면 우선 'Ctrl + z'로 작업을 중지 후 'bg [%작업번호] 또는 fg [%작업번호] 명령으로 전환

- 작업 번호를 지정하지 않고 'bg 또는 fg' 명령 사용시 작업 순서가 '+'인 작업에 적용



작업 종료 : Ctrl + c

- ForeGround 작업을 'Ctrl + c' 입력시 대부분 종료

- 'Ctrl + c' 는 인터럽트 시그널을 ForeGround 프로세스에 전달(인터럽트를 받으면 기본적으로 종료)

- 프로그램에서 'Ctrl + c(인터럽트 시그널 전달)' 을 무시하도록 설정했을 경우는 종료되지 않음

- 다른 종료 방법으로는 다른 터미널(ForeGround 작업 같은 경우)에서 해당 프로세스의 PID를 찾아 강제 종료


- BackGround 작업은 'kill' 명령으로 강제 종료해야함.

- 'kill' 명령의 인자로 PID 대신 '%작업 번호'를 지정해도 됨.



 로그아웃 후에도 BackGround 작업 계속 실행 : nohup 

- BackGround 작업을 실행한 터미널이 종료되거나, 사용자가 로그아웃시

 실행 중이던 BackGround 작업도 함께 종료

- 로그아웃한 다음에도 작업이 완료될 때까지 작업을 실행하는 경우 'nohup' 명령 사용

 nohup

- 기능 : 로그아웃 뒤에도 BackGround 작업 계속 실행

- 형식 : nohup 명령&


- 'nohup' 로 실행하는 명령은 반드시 BackGround 로 해야함

- 별도의 출력 방향 전환이 없을 경우 명령의 실행 결과와 오류 메시지는 현재 디렉터리에 'nohup.out' 파일로 저장








반응형