Linux 명령 끝에있는 "&"는 무엇을 의미합니까?


98

저는 시스템 관리자이고 시스템을 정리하기 위해 Linux 스크립트를 실행하라는 요청을 받았습니다.

명령은 다음과 같습니다.

perl script.pl > output.log &

이 명령은 &기호 로 끝나는데 특별한 의미가 있습니까?

나는 쉘에 대한 기본적인 지식을 가지고 있지만 전에는 본 적이 없습니다.


미안 해요, 그런 기본적인 것들에 대해 알고 있었어요
Dude

3
이 페이지에서 &와 의 차이점을 찾고 있다면 &&: &백그라운드에서 첫 번째 명령을 실행합니다. &&첫 번째 명령을 실행하고 성공하면 두 번째 명령을 조건부로 진행합니다.
데이비드 Bodow

답변:


150

&백그라운드에서 실행 명령을합니다.

에서 man bash:

제어 연산자 &에 의해 명령이 종료 되면 쉘은 서브 쉘의 백그라운드에서 명령을 실행합니다. 쉘은 명령이 완료 될 때까지 기다리지 않으며 리턴 상태는 0입니다.


12

또한 최소 터미널 수를 유지하기 위해 "&"기호를 사용하여 하나의 ssh 연결을 통해 많은 프로세스를 실행할 수 있습니다. 예를 들어, 파일을 추출하기 위해 메시지를 수신하는 하나의 프로세스가 있고, 두 번째 프로세스는 파일을 업로드하기 위해 메시지를 수신하는 프로세스가 있습니다. "&"를 사용하여 서버에 대한 단일 ssh 연결을 통해 하나의 터미널에서 두 서비스를 모두 실행할 수 있습니다. .


***** 저는 "&"를 통해 실행되는 이러한 프로세스가 ssh 세션이 닫힌 후에도 "활성 상태로 유지"된다는 것을 깨달았습니다! 서버 연결이 중단 된 경우 매우 깔끔하고 유용합니다 **


nohup프로세스도 살아있게 유지합니다.
Jerry Chin

2
우리가 원하는 경우에 우리는 프로세스를 종료 할 수 있습니다 및 함께 우리는뿐만 아니라 PID를 얻을 수 있으며, 우리는 그 과정의 상태를 확인하실 수 있습니다
Dhaval Solanki

12

달리 말하지 않으면 명령이 포 그라운드를 차지합니다. 단일 셸 세션에서 하나의 "포 그라운드"프로세스 만 실행됩니다. & 기호는 명령이 백그라운드 프로세스에서 실행되도록 지시하고 추가 명령을 위해 즉시 명령 줄로 돌아갑니다.

sh my_script.sh &

셸 세션이 닫힌 후에는 백그라운드 프로세스가 활성 상태로 유지 되지 않습니다 . SIGHUP 는 실행중인 모든 프로세스를 종료합니다. 어쨌든 기본적으로. 명령이 오래 실행되거나 무기한으로 실행되는 경우 (예 : 마이크로 서비스) 세션에서 연결을 끊은 후에도 계속 실행되도록 nohup으로 명령을 추가해야합니다.

nohup sh my_script.sh &

편집 : &를 사용할 때 백그라운드 프로세스 닫기와 관련된 회색 영역이있는 것으로 보입니다. OS 및 로컬 구성 (특히 CENTOS / RHEL에서)에 따라 쉘 프로세스를 닫을 수 있다는 점 에 유의 하십시오 . https://serverfault.com/a/117157 .


2

확실하지는 않지만 지금 책을 읽고 있는데 프로그램이 신호를 처리해야한다는 것입니다 (를 누를 때와 같이 CTRL-C). 이제 프로그램은 SIG_IGN모든 신호를 무시하거나 SIG_DFL기본 동작을 복원하는 데 사용할 수 있습니다 .

이제 그렇게하면 $ command &백그라운드 프로세스로 실행되는이 프로세스는 발생하는 모든 신호를 무시합니다. 포 그라운드 프로세스의 경우 이러한 신호는 무시되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.