터미널에서 백그라운드 작업 관리하기 job-control

bash나 zsh에서는 작업 제어(job control)을 기본적으로 제공하고 있다. 현재 동작하고 있는 프로그램을 백그라운드로 보내거나 백그라운드에 있는 프로그램을 다시 꺼내서 사용하는 것도 가능하다.

평소에 다음과 같이, 끝에 &을 붙여 명령어를 사용해본 적이 있다면 자신도 모르는 사이에 이미 사용하고 있다는 뜻이다.

$ npm start &
[1] + running    npm start

먼저 간단하게 예제를 보자. 다음 예시는 간단하게 sleep을 사용하고 있다. &와 함께 실행하면 백그라운드로 구동한다는 의미다.

$ sleep 10 &
[1] 3901
$ sleep 20 &
[2] 3902
$ sleep 30 &
[3] 3903

현재 실행하고 있는 작업 목록은 jobs로 확인할 수 있다.

$ jobs
[1]   running    sleep 10
[2] - running    sleep 20
[3] + running    sleep 30

현재 실행하고 있는 프로세스를 일시 정지하고 백그라운드로 보내는 키는 Ctrl + z다. (tmux를 사용하고 있다면 이 키로는 동작하지 않을 수 있다.)

$ vim hello
# <Ctrl + z>을 누름
[1] + 4049 suspended   vim hello

다시 해당 프로세스를 포그라운드로 부르기 위해서는 fg 명령을 사용할 수 있다. fg 뒤 인자는 직접 입력해도 되지만 tab 키를 누르면 알아서 자동완성 해준다.

$ fg %1
$ fg %vim\ hello

만약 백그라운드에서 일시 정지가 아니라 계속 구동하려고 한다면 어떻게 해야 할까? 그때는 백그라운드 명령인 bg를 사용할 수 있다.

$ sleep 30
# <Ctrl + z>을 누름
[1] + 4050 suspended  sleep 30
$ bg %sleep
# 아래처럼 간단하게 가능
$ %sleep &
[1] - 4050 continued  sleep 30
$ jobs
[1] - 4050 running    sleep 30
$
[1] - 4050 done       sleep 30

알고 나니 별 내용은 아니지만 지금까지 전혀 모르고 사용했다는 점에 반성하는 마음에서, 그리고 매번 백그라운드를 끌 줄 몰라서 kill을 당해야만 했던 수많은 프로세스를 추모하며 작성했다. 지금까지 몰랐다는데 참 억울하지만 앞으로는 프로세스 번호 찾으려고 애쓸 일이 없다는 점이 참 감사하다.

김용균

안녕하세요, 김용균입니다. 문제를 해결하기 위해 작고 단단한 코드를 작성하는 일을 합니다. 웹의 자유로운 접근성을 좋아합니다. 프로그래밍 언어, 소프트웨어 아키텍처, 커뮤니티에 관심이 많습니다.

이 글 공유하기

이 글이 유익했다면 주변에도 알려주세요!

페이스북으로 공유하기트위터로 공유하기링크드인으로 공유하기Email 보내기

주제별 목록

같은 주제의 다른 글을 읽어보고 싶다면 아래 링크를 확인하세요.

April 02, 2016

Gradle로 Java 프로젝트 시작하기 요약

spring의 gradle로 프로젝트 시작하기 를 따라하며 정리한 글이다. 먼저 brew로 java와 의존성 및 빌드 관리/자동화 도구인 gradle 을 설치한다. 문제없이 설치되었다면 버전 정보를 출력한다. gradle로 프로젝트를 초기화한다. …

March 30, 2016

터미널에서 트위터하기 rainbowstream

터미널에서 사용할 수 있는 트위터 클라이언트는 상당히 많은 편이다. 이전까지 node-tweet-cli 를 사용하고 있었는데 스트림도 지원하고 간단하게 트윗을 하기엔 편했지만 멘션에 답하는 기능이 없어서 여간 불편했었다. 그러던 중에 rainbo…