작업 제어(유닉스)
Job control (Unix)유닉스 및 유닉스 유사 운영체제에서, 작업관제는 쉘에 의한, 특히 대화형으로 작업을 제어하는 것을 말하며, 여기서 "작업"은 프로세스 그룹에 대한 쉘의 표현이다.기본적인 작업 제어 기능은 작업/프로세스 그룹의 모든 프로세스를 일시 중단, 재개 또는 종료하는 것으로, 작업으로 신호를 전송하여 보다 발전된 기능을 수행할 수 있다.잡 컨트롤은 멀티프로세싱으로 인해 유닉스에 특히 관심이 많으며, 순차 실행(배치 처리)에 자주 적용되는 잡 컨트롤과는 일반적으로 구별되어야 한다.
개요
이 섹션에는 ($!)라는 변수로 작업 번호에 대한 정보가 누락되어 있다.(2021년 4월) |
터미널(또는 터미널 에뮬레이터)을 통해 유닉스 또는 유닉스 유사 운영 체제를 사용하는 경우, 사용자는 처음에는 단일 프로세스, 즉 로그인 쉘만 실행하게 된다.대부분의 tasks[를](디렉터리 목록이 편집 파일 등) 쉽게 프로그램이 터미널을 장악하고 프로그램이 공식적으로 –을 빠져나오는 껍질에 표준 입력 및 또는 터미널에서 읽고 쓰는,기와 신호는 keybo는데 표준 결과에를 첨부하여 제어하게 함으로써 수행될 수 있다.함께d, 누름으로 인한 종단 신호와 같은Control+C.
단, 사용자가 단말기를 다른 목적으로 사용하는 동안 작업을 수행하고자 할 때도 있다.실행 중이지만 단말기에서 입력을 받지 않는 작업은 "백그라운드에서" 실행 중이고, 단말기에서 입력을 수신하는 단일 작업은 "전면"에 있다고 한다.직무관리는 사용자가 백그라운드에서 프로세스를 시작하고, 이미 실행 중인 프로세스를 백그라운드로 전송하며, 백그라운드 프로세스를 전면에 도입하고, 프로세스를 일시 중단하거나 종료할 수 있도록 하기 위해 개발된 시설이다.
작업 개념은 단일 셸 명령어의 (셸) 개념을 명령에 수반하는 가능한 많은 프로세스의 (운영 체제) 개념에 매핑한다.다중 프로세스 태스크는 프로세스가 추가적인 하위 프로세스를 생성할 수 있고 단일 셸 명령어가 여러 통신 프로세스의 파이프라인으로 구성될 수 있기 때문에 발생한다.예를 들어, "제목" 텍스트가 들어 있는 줄을 선택하고 알파벳순으로 정렬하여 결과를 호출기에 표시하는 명령.
직함을 다듬다txt sort later
이렇게 하면 최소 세 가지 프로세스가 생성되며, 하나는grep, 하나는 sort, 다른 하나는 little.직무관리는 쉘이 이러한 관련 프로세스를 하나의 실체로 제어할 수 있도록 하며, 사용자가 적절한 키 조합(보통 +)Z을 발행하면 전체 프로세스 그룹이 중단된다.
잡스는 운영체제에 의해 단일 프로세스 그룹으로 관리되며, 작업은 그러한 그룹을 쉘이 내부적으로 나타내는 것이다.이는 POSIX에서 다음과 같이 정의된다.[1]
쉘 파이프라인과 그 파이프라인에서 파생된 모든 프로세스를 구성하는 일련의 프로세스 그룹.
작업은 작업관리 작업 ID라고 하는[b] 핸들이나 단순 작업 ID로 언급할 수 있는데, 이 핸들은 셸 빌트인(shell builtin)이 작업을 지칭하기 위해 사용한다.작업 ID는%
캐릭터;%n
작업 n을 식별하는 동안%%
현재 작업을 식별한다.다른 작업 ID는 POSIX가 지정한다.[2]비공식 용어로 이 숫자를 "작업 번호" 또는 "작업 ID"로 지칭할 수 있으며, Bash 문서에서는 (% 우선) 작업 ID를 jobspec로 지칭한다.[3]
작업 제어 및 작업 ID는 일반적으로 대화형 용도로만 사용되며, 여기서 프로세스 그룹을 간단히 참조할 수 있다. 스크립팅 PGID는 보다 정확하고 견고하기 때문에 대신 사용되며, 실제로 작업 제어는 bash 스크립트에서 기본적으로 비활성화된다.
역사
직업관제는 처음에는 짐 쿨프([4]Jim Kulp)에 의해 C 쉘에서, 그 후 오스트리아의 IIASA(IIASA)에서 실행되어 4.1의 특징을 활용하였다.BSD 커널.벨 연구소에서 개발된 KornShell은 그것을 채택했고 그것은 나중에 본 쉘의 SVR4 버전에 통합되었고, 대부분의 현대 유닉스 쉘에 존재한다.
명령
이 섹션에는 대기 정보가 누락되어 있다.(2021년 4월) |
POSIX 표준은 bg와 fg 각각 백그라운드와 포그라운드에서 일시 중단된 작업을 재개하기 위한 두 가지 명령을 지정한다.이것들은 Korn shell job control 명령을 본떠 만든 것이다.[5]
실행
전형적으로, 그 껍데기는 작업 테이블에 작업 목록을 보관한다.작업은 파이프라인의 모든 구성원과 그 하위 항목으로 구성된 프로세스 그룹에 해당한다는 점을 기억하십시오.그jobs
명령어는 작업 테이블에 존재하는 백그라운드 작업을 작업 번호 및 작업 상태(작업 또는 실행 중)와 함께 나열한다.사용자가 로그아웃할 때 세션이 종료되면(세션 리더 프로세스를 종료하는 셸 제외) 셸 프로세스는 모든 작업에 REHEMUP를 전송하고 프로세스 그룹이 종료될 때까지 기다렸다가 종료한다.
명령을 사용하여 작업 테이블에서 작업을 제거할 수 있으므로 세션이 종료될 때 하위 프로세스 그룹이 AHEMSUP로 전송되지 않으며 쉘이 종료되기를 기다리지 않는다.따라서 이들은 고아 프로세스가 되며, 이것이 더 자주 사용되어 프로세스가 init에 의해 채택되고(커널이 상위 프로세스를 init로 설정) 데몬으로 계속 실행되지만, 운영 체제에 의해 종료될 수 있다.노업과 단말기 멀티플렉서 사용 등 작업종료를 막을 수 있는 대안이 있다.
전면에서 실행 중인 작업은 일시 중단 문자(Ctrl-Z)를 입력하여 중지할 수 있다.이것은 프로세스 그룹으로 "단말 정지" 신호(SIGTSTP)를 전송한다.기본적으로 SIGTSTP는 수신하는 프로세스가 중지되고 제어는 쉘로 반환된다.그러나, 프로세스는 신호 핸들러를 SIGTSTP에 등록하거나 무시할 수 있다. 또한 "정지" 신호(SIGSTOP)로 프로세스가 일시 중지될 수 있는데, 이 신호는 잡히거나 무시할 수 없다.
전면에서 실행 중인 작업은 중단 문자(Ctrl-C)를 입력하여 중단할 수 있다.이렇게 하면 "중복" 신호(SIGINT)가 전송되는데, 이 신호는 오버라이드할 수 있지만 기본적으로 프로세스를 종료하는 것으로 되어 있다.
중지된 작업은 를 사용하여 백그라운드 작업으로 재개할 수 있다.bg
에 대한 기본 제공 또는 포그라운드 작업으로서fg
. 두 경우 모두 쉘이 I/O를 적절하게 리디렉션하고 SIGCONT 신호를 프로세스로 전송하므로 운영체제가 실행을 재개한다.Bash에서는 앰퍼샌드를 추가해 백그라운드 작업으로 프로그램을 시작할 수 있다().&
명령행으로, 명령행의 출력은 단자(다른 프로그램의 출력과 인터리브됨)로 향하지만, 단자 입력에서는 읽을 수 없다.
제어 단자에서 읽거나 쓰기를 시도하는 백그라운드 프로세스는 SIGTTIN(입력용) 또는 SIGTTOU(출력용) 신호를 전송한다.이러한 신호는 기본적으로 프로세스를 중지하지만 다른 방법으로도 처리될 수 있다.쉘은 종종 SIGTTOU의 기본 정지 동작을 무시하여 백그라운드 프로세스가 기본적으로 제어 단자에 출력을 전달한다.
바쉬와 호환되는 조개껍질에서는kill
붙박이(아닌)/bin/kill
)은 작업 ID뿐만 아니라 프로세스 그룹 ID로도 작업을 신호화할 수 있음 – 작업으로 신호를 보내는 것은 전체 프로세스 그룹으로 작업을 전송하며, 작업 ID로 지정된 작업은 접두사를 붙여 제거해야 함%
.kill
작업으로 신호를 보낼 수 있지만, 시스템에서 프로세스를 제거하려는 경우 SIGKill 및 SIGTERM(기본값) 신호가 가장 적용 가능하다.
참고 항목
메모들
참조
- ^ IEEE 규격 1003.1-2001, 섹션 3.201, 작업
- ^ IEEE 규격 1003.1-2001, 섹션 3.203, 작업 제어 작업 ID
- ^ 7.1 작업 제어 기본 사항
- ^ 빌 조이의 서문Anderson, Gail; Paul Anderson (1986). The UNIX C Shell Field Guide. Prentice-Hall. p. xvii. ISBN 0-13-937468-X.
- ^ The Single UNIX Specification, The Open Group의 이슈 7; – Commands & Utilities Reference, The Single UNIX Specification, The Open Group의 이슈 7. – Commands & UIX Reference,
추가 읽기
- Marshall Kirk McKusick and George V. Neville-Neil (2004-08-02). "FreeBSD Process Management: Process Groups and Sessions". The Design and Implementation of the FreeBSD Operating System. Addison Wesley. ISBN 0-201-70245-2.
외부 링크
- "작업 제어", Bash 참조 매뉴얼