저는 시스템 관리자이고 시스템을 정리하기 위해 Linux 스크립트를 실행하라는 요청을 받았습니다.
명령은 다음과 같습니다.
perl script.pl > output.log &
이 명령은 &
기호 로 끝나는데 특별한 의미가 있습니까?
나는 쉘에 대한 기본적인 지식을 가지고 있지만 전에는 본 적이 없습니다.
저는 시스템 관리자이고 시스템을 정리하기 위해 Linux 스크립트를 실행하라는 요청을 받았습니다.
명령은 다음과 같습니다.
perl script.pl > output.log &
이 명령은 &
기호 로 끝나는데 특별한 의미가 있습니까?
나는 쉘에 대한 기본적인 지식을 가지고 있지만 전에는 본 적이 없습니다.
&
와 의 차이점을 찾고 있다면 &&
: &
백그라운드에서 첫 번째 명령을 실행합니다. &&
첫 번째 명령을 실행하고 성공하면 두 번째 명령을 조건부로 진행합니다.
답변:
는 &
백그라운드에서 실행 명령을합니다.
에서 man bash
:
제어 연산자 &에 의해 명령이 종료 되면 쉘은 서브 쉘의 백그라운드에서 명령을 실행합니다. 쉘은 명령이 완료 될 때까지 기다리지 않으며 리턴 상태는 0입니다.
또한 최소 터미널 수를 유지하기 위해 "&"기호를 사용하여 하나의 ssh 연결을 통해 많은 프로세스를 실행할 수 있습니다. 예를 들어, 파일을 추출하기 위해 메시지를 수신하는 하나의 프로세스가 있고, 두 번째 프로세스는 파일을 업로드하기 위해 메시지를 수신하는 프로세스가 있습니다. "&"를 사용하여 서버에 대한 단일 ssh 연결을 통해 하나의 터미널에서 두 서비스를 모두 실행할 수 있습니다. .
***** 저는 "&"를 통해 실행되는 이러한 프로세스가 ssh 세션이 닫힌 후에도 "활성 상태로 유지"된다는 것을 깨달았습니다! 서버 연결이 중단 된 경우 매우 깔끔하고 유용합니다 **
nohup
프로세스도 살아있게 유지합니다.
달리 말하지 않으면 명령이 포 그라운드를 차지합니다. 단일 셸 세션에서 하나의 "포 그라운드"프로세스 만 실행됩니다. & 기호는 명령이 백그라운드 프로세스에서 실행되도록 지시하고 추가 명령을 위해 즉시 명령 줄로 돌아갑니다.
sh my_script.sh &
셸 세션이 닫힌 후에는 백그라운드 프로세스가 활성 상태로 유지 되지 않습니다 . SIGHUP 는 실행중인 모든 프로세스를 종료합니다. 어쨌든 기본적으로. 명령이 오래 실행되거나 무기한으로 실행되는 경우 (예 : 마이크로 서비스) 세션에서 연결을 끊은 후에도 계속 실행되도록 nohup으로 명령을 추가해야합니다.
nohup sh my_script.sh &
편집 : &를 사용할 때 백그라운드 프로세스 닫기와 관련된 회색 영역이있는 것으로 보입니다. OS 및 로컬 구성 (특히 CENTOS / RHEL에서)에 따라 쉘 이 프로세스를 닫을 수 있다는 점 에 유의 하십시오 . https://serverfault.com/a/117157 .
확실하지는 않지만 지금 책을 읽고 있는데 프로그램이 신호를 처리해야한다는 것입니다 (를 누를 때와 같이 CTRL-C
). 이제 프로그램은 SIG_IGN
모든 신호를 무시하거나 SIG_DFL
기본 동작을 복원하는 데 사용할 수 있습니다 .
이제 그렇게하면 $ command &
백그라운드 프로세스로 실행되는이 프로세스는 발생하는 모든 신호를 무시합니다. 포 그라운드 프로세스의 경우 이러한 신호는 무시되지 않습니다.