ComputerScience/System Programming
리눅스 jobs control , 백그라운드로 실행되는 작업 관리하기.
ELLIE_ing
2021. 11. 11. 10:24
Linux shell
리눅스 쉘에서는 프로세스를 작업(job)이라는 단위로 관리하는데 좀더 효율적으로 프로세스를 관리를 하기위해 포그라운드 (foreground)와 백그라운드 (background) 방식 으로 작업을 나누어 실행시킨다.
- 백그라운드: 작업을 수행하면 동시에 다른 명령어들을 실행, 실행시키는 명령어 뒤에 & 붙히게되면 background실행
- 포그라운드 : terminal 이용 해 돌아가는 거의 대부분 , 작업이 종료될 때까지 다른 쉘 명령어를 수행불가능
job
- 백그라운드로 실행되는 작업을 보여주는 명령어
- Foreground <-> Background 더 효율적으로 관리
- terminal에 의존적이다.
- process와 달리 터미널 명령을 통한 작업만을 의미한다
- process를 실행할 수 있지만, terminal이 종료되면 job과 함께 process도 종료된다.
- 각각 terminal마다 job 따로 존재
job에서도 process와 마찬가지로 kill명령어 사용가능
- kill %작업번호
ps명령어를 통해 PID 알아내 종료시키는 것도 가능
process kill 명령어와 다른점) 옵션 붙히지않고 그냥 %를 사용해 작업번호를 넣어주면 된다.
예시 명령어
- sleep
해당 초만큼 기다리는 명령어 - sleep 500 &
- sleep 700 &
- jobs
- kill %1 #실행중인 백그라운드 프로세스 확인
- jobs
생각 )
백그라운드에서 실행되는 프로세스를 포그라운드로 가져오려면?
-> fg 와 bg를 이용
정지되어 있는 프로세스를 백그라운드에서 실행시키기 위해 먼저 프로세스의 작업번호를 jobs명령어로 확인 하고
- fg [jobs id] ## 포그라운드로 프로세스 실행
- bg [jobs id] ## 백그라운드로 프로세스 실행
time.py를 백그라운드 실행 -
- ps명령어로 현재 실행되고 있는 process 확인 -> 25번 PID사용중
jobs명령어로 1번으로 실행중인 python 확인
kill명령어 이용해서 1번 종료시켜주고 다시 jobs 확인해보니 Terminated 된 것 확인