포스팅은 모두의 리눅스에 기반하여 작성되었습니다. 실습 환경 Oracle VM 7.0, Linux/Ubuntu 20.04 입니다.
리눅스는 멀티태스킹을 지원합니다. 셸에서 프로그램 여러 개를 실행하고 정지하는 방법을 정리하겠습니다.
목차
1. 프로세스
2. 잡(포그라운드, 백그라운드)
프로세스
셸에서 사용할 수 있는 명령어의 실체는 디스크에 있는 파일입니다.
bin 내부를 살펴보면 우리가 지금껏 사용했던 cat, ls 등 명령어 파일을 확인할 수 있습니다. 셸에서 명령어를 입력하면 커널이 디스크에 있는 해당 파일을 읽어서 메모리에 올린 뒤 CPU가 프로그램을 실행합니다. 메모리 위에 올린 프로그램을 프로세스라 합니다.
같은 프로그램을 실행하더라도 각 프로세스는 별도의 메모리 영역을 가집니다. 예를 들어 ls 명령어를 동시에 여러 번 실행해도 각 프로세스가 내부적으로 사용하는 데이터가 섞일 일은 없습니다. 추가로 프로세스를 실행한 사용자 외에는 해당 프로세스를 조작할 수 있는 권한이 제한됩니다.
리눅스 커널은 각 프로세스에게 PID(프로세스 ID)라는 고유한 번호를 할당해서 관리합니다.
ps : 프로세스 목록 표시
아무런 인자 없이 ps를 실행하면 현재 접속한 터미널에서 실행한 프로세스만 출력합니다. PID는 종료하기 전까지 바뀌지 않습니다.
ps 옵션
x : ps 명령어를 실행한 사용자의 프로세스 출력
us : ps 명령어를 실핸한 사용자의 프로세스를 상세하게 출력
ax : 모든 사용자의 프로세스를 출력
aux : 모든 사용자의 프로세스를 상세하게 출력
auxww : aux 옵션의 출력 결과가 화면에 잘리지 않도록 출력
잡
앞서 살펴본 프로세스는 리눅스 커널 입장에서 바라본 처리 단위입니다. 한편 셀에서 바라본 처리 단위를 잡(job)이라고 합니다.
커맨드 라인에서 명령어 하나만을 입력했다면 프로세스와 잡이 같습니다.(파이프를 사용하지 않았다는 가정)
프로세스는 시스템 전체에 유일한 값인 PID로 할당됩니다. 한편 잡은 셸별로 관리됩니다. 따라서 중복된 잡 번호가 할당될 수 있습니다.
잡은 일시 정지하거나 백그라운드에서 실행할 수 있습니다. 이 말은 여러 작업을 병행시켜 처리하는 멀티태스킹이 가능하다는 의미입니다.
man bash
이후 Ctrl + z 를 눌러 프로세스를 정지해봅시다.
vim file.txt
다시 Ctrl + z 를 눌러 프로세스를 정지합시다.
Jobs : 현재 셸의 잡 목록 확인하기
이제 현재 잡 목록을 확인해봅시다.
l 옵션을 지정해서 PID도 볼 수 있습니다.
fg 명령어 : 잡을 포그라운드로 전환
사용자의 입력을 받아들일 수 있는 잡의 상태를 포그라운드라고 합니다. 정지 상태에 있는 bash 메뉴얼을 다시 확인하기 위해서는 포그라운드로 되돌려야 합니다.
잡을 포그라운드로 전환
fg %<잡 번호>
fg %1 을 입력하고 엔터키를 통해 커널에 전달하면
아래와 같이 다시 man 명령어가 실행됩니다.
bg 명령어 : 잡을 백그라운드로 전환
포그라운드와 반대로 사용자가 조작할 수 없는 잡의 상태를 백그라운드라고 합니다.
bg %<잡 번호>
백그라운드로 돌리더라도 여전히 작업은 진행됩니다. jobs을 확인해보면 &(엠퍼센트)가 표시될 수 있는데 잡이 백그라운드에서 돌고 있음을 의미합니다.
처음부터 잡을 백그라운드에서 실행해야 할 때도 있습니다. 다음과 같이 라인 마지막에 &를 추가하면 됩니다.
명령어를 백그라운드로 실행
<command> &
제가 진행하고 있는 개인 프로젝트에서도 & 명령어를 사용하고 있습니다. xuni - 젠킨스 셸 스크립트 보러가기
아래처럼 Job들을 처음부터 백그라운드로 실행하고 있습니다.
여담으로 젠킨스 파이프라인의 경우 모든 stage를 수행해야 종료됩니다. 만약에 위 명령어를 포그라운드에서 실행될 경우 stage가 종료될 수 없습니다. 왜냐하면 톰캣 서버는 한 번 켜지게 되면 문제가 발생한 것이 아닌 이상 계속해서 켜져있으니까요 ㅎ
'Linux' 카테고리의 다른 글
모두의 리눅스 (5) 잡/프로세스 종료 (0) | 2023.05.27 |
---|---|
Linux ps 명령어 정리 (1) | 2023.05.27 |
모두의 리눅스 (3) 파일 검색 및 명령어 find, man (0) | 2023.05.24 |
모두의 리눅스 (2) 파일 조작 기본 명령어 mkdir, touch, rm, rmdir, cat, cp, mv, ln (0) | 2023.05.24 |
모두의 리눅스 (1) 용어 정리 셸, 커널, 프롬프트, 셸 스크립트 (0) | 2023.05.23 |