리눅스 프로세스 백그라운드 실행 방법 2가지

용량 100G 넘는 파일을 cp로 복사하는 명령어를 포그라운드로 실행하는 상황을 떠올려보자. 포그라운드 상태에서 쉘은 추가 입력을 받을 수 없기 때문에 복사 작업이 끝날 때까지 기다려야 한다.

그러나 프로세스를 백그라운드로 실행하면 작업이 진행되는 와중에도 쉘에서 다른 일을 할 수 있다.

이건 단순한 형태의 예시 상황이지만 백그라운드 실행은 여러모로 유용하다.

1. &

프로세스를 백그라운드로 실행하는 첫번째 방법은 끝에 & 를 붙이는 것이다.

용량이 1.3G 쯤 되는 zip 파일이 있다.

[root@newhost background]# ls -lh
total 1.3G
-rw-r--r--. 1 root root 1.3G Feb 27 22:55 test_file.zip
drwxr-xr-x. 2 root root    6 Feb 27 22:56 tmp_dir

이 파일을 tmp_dir 디렉토리에 복사하는 프로세스를 백그라운드로 실행하면

[root@newhost background]# cp test_file.zip ./tmp_dir &
[1] 3822
[root@newhost background]# 
linux background

이렇게 프로세스의 PID를 출력하고 바로 쉘 입력창으로 돌아온다.

백그라운드 프로세스 현황을 보고 싶으면 jobs 명령어를 사용한다.

[root@newhost background]# jobs
[1]+  Done                    cp -i test_file.zip ./tmp_dir

입력한 명령이 완료(Done)된 것을 볼 수 있다.

2. Ctrl + z / bg

포그라운드로 실행한 프로세스를 백그라운드 프로세스로 바꿀 수도 있다.

명령을 실행하고 포그라운드 상태에서 ctrl + z 를 누르면 작업이 정지(pause)된다.

[root@newhost background]# cp test_file.zip tmp_dir/
^Z
[1]+  Stopped                 cp -i test_file.zip tmp_dir/

jobs 로 확인해봐도 상태가 Stopped 인 걸 볼 수 있다.

[root@newhost background]# jobs
[1]+  Stopped                 cp -i test_file.zip tmp_dir/

이때 해당 명령을 백그라운드로 실행하려면

bg %[job number]

와 같이 명령한다. jobs를 입력했을 때 맨 앞에 대괄호에 묶여 있는 숫자가 job number인데 백그라운드로 실행할 프로세스의 job number를 % 뒤에 입력한다.

[root@newhost background]# bg %1
[1]+ cp -i test_file.zip tmp_dir/ &
[root@newhost background]# jobs
[1]+  Running                 cp -i test_file.zip tmp_dir/ &
[root@newhost background]# jobs
[1]+  Done                    cp -i test_file.zip tmp_dir/
[root@newhost background]#

사실 이 경우 처럼 job이 1개 밖에 없으면 그냥 job number를 생략하고 bg만 입력해도 된다.

[root@newhost background]# cp test_file.zip tmp_dir/
^Z
[1]+  Stopped                 cp -i test_file.zip tmp_dir/
[root@newhost background]# bg
[1]+ cp -i test_file.zip tmp_dir/ &

관련 글

댓글 남기기