나는 당신이 이것을 원한다고 가정합니다 :
myCommand1 & myCommand2 &
myCommand1앰퍼샌드가 뒤 따르는 것으로 시작 하여 백그라운드로 보낸 다음 즉시 시작 myCommand2하여 백그라운드로 보내므로 셸이 다시 해제됩니다.
기울기
이해를 돕기 위해 여기 에서 명령으로 파이프 라인 을 대체 할 수 있습니다.
목록은 운영자 중 하나에 의해 분리 된 하나 이상의 파이프 라인 시퀀스입니다 . , & , && 또는 || , 및 선택적으로
; , & 또는 .
제어 연산자 & 가 명령을 종료 하면 쉘은 백그라운드에서 서브 쉘의 명령을 실행합니다. 쉘은 명령이 완료되기를 기다리지 않고 리턴 상태는 0입니다. 명령은 ;로 구분됩니다 . 순차적으로 실행됩니다. 쉘은 각 명령이 차례로 종료 될 때까지 기다립니다. 리턴 상태는 마지막으로 실행 된 명령의 종료 상태입니다.
AND 및 OR 목록은 && 및 ||로 구분 된 하나 이상의 파이프 라인 시퀀스입니다. 각각 제어 연산자.
출처:man bash
이를 예제로 나누겠습니다. 명령을 결합하고 다음 중 하나로 분리하여 목록을 작성할 수 있습니다. ; & && ||:
command1 ; command2 # runs sequentially
command1 && command2 # runs sequentially, runs command2 only if command1 succeeds
command1 || command2 # runs sequentially, runs command2 only if command1 fails
command1 & command2 # runs simultaneously
다음 중 하나를 사용하여 목록을 종료 할 수 있습니다 ; & <newline>..
일반적으로 당신은 눌러 명령이나 목록을 실행 Enter같음을, 그 <newline>. 세미콜론 ;은 특히 스크립트에서 동일한 목적으로 사용됩니다. &그러나 앰퍼샌드 는 백그라운드에서 서브 쉘에서 명령을 시작하여 쉘을 즉시 해제합니다.
()둥근 대괄호 {}를 사용 하여 목록을 추가로 그룹화 할 수 있습니다 . 차이점은 둥근 대괄호는 서브 쉘을 생성하지만 중괄호는 그렇지 않습니다. 중괄호는 첫 번째와 세미콜론 뒤에 공백이 있어야하며 닫는 괄호 앞에 줄 바꿈이 있어야합니다. 예를 들면 다음과 같습니다.
# if c1 succeeds start a shell in the background
# and run c2 and c3 sequentially inside it
c1 && ( c2 ; c3 ) &
# run c1 and if it succeeds c2 sequentially as a group command
# if c1 or c2 fail run c3 in the background
{ c1 && c2 ;} || c3 &
확실하지 않은 용도로 사용 true하고 false건설이 예상대로 작동하는지 테스트하는 경우 상당히 복잡해질 수 있습니다 .
$ { true && true ;} || echo 2
$ { true && false ;} || echo 2
2
작업 제어
이 jobs명령은 현재 쉘에서 실행 중이거나 최근에 완료된 백그라운드 작업 목록을 표시합니다. 작업 제어를위한 여러 가지 단축키와 명령이 있습니다.
- Ctrl+ 현재 포 그라운드에서 실행중인 프로세스 Z가 중지 되도록 하는 일시 중단 문자를 입력합니다. 종료되지는 않지만
jobs목록에 남아 있습니다.
- Ctrl+ 터미널에서 입력을 읽으려고 할 때 포 그라운드에서 현재 실행중인 프로세스가 중지되도록Y 하는 지연된 일시 중단 문자 유형
fg= %필요한 경우 프로세스를 포 그라운드로 가져와 다음과 같이 프로세스를 지정할 수 있습니다.
% # last process in the jobs list
%1 # 1st process in the jobs list
%abc # process beginning with the string “abc”
%?abc # process containing the string “abc” anywhere
bg= %&필요한 경우 백그라운드에서 프로세스를 시작합니다.
%& # last process in the jobs list
%1& # 1st process in the jobs list
%abc& # process beginning with the string “abc”
%?abc& # process containing the string “abc” anywhere
wait 백그라운드 프로세스가 완료 될 때까지 대기하고 종료 상태를 반환합니다.
wait %1 # 1st process in the jobs list
시간이 오래 걸리는 프로세스 ( jobs번호 3)를 시작한 다음 컴퓨터가 끝났을 때 컴퓨터를 일시 중단 echo하고 프로세스가 성공하지 못한 경우 메시지를 표시 한다고 상상해보십시오 .
wait %3 || echo failed ; systemctl suspend