2017-04-05 21 views
0

Cygwin에서 이상한 일이 발생했습니다. 일부 프로세스를 백그라운드로 실행하는 스크립트를 실행합니다. 그러나 스크립트가 끝나자 모두 죽습니다.스크립트에서 호출 된 백그라운드 프로세스가 종료 된 후에 종료합니다.

간단한 예를 들어,이 스크립트를 수행하십시오

tail -f logfile.log & 

내가 꼬리 작동 (는 마지막으로 X 선 출력)하지만 프로세스가 더 이상 즉시 스크립트가 끝나는대로 배경에없는 것을 볼 수 있습니다.

Linux에서는 다르게 작동합니다. 이유는 무엇입니까?

+0

cygwin 설치시이 문제를 재현하려고 시도했지만보고 한 내용이 표시되지 않습니다. 스크립트가 종료 된 후에도 꼬리가 계속 실행 중입니다. – ewindes

답변

1

나는 리눅스에서 nohup *cmd* &을 시도 할 것입니다. 하지만 자식에게 전달되는 파일 설명자를 설명해야합니다. 그래서 nohup *cmd* </dev/null >/dev/null 2>&1 &하지만 tail -f 출력은 어디로 갈까요? 쉘을 종료하면 창이 닫힙니 까? 출력을 보려면 쉘을 종료 할 수 없습니다.

+0

Cygwin 윈도우가 열린 상태로 유지되므로 로그가 꼬리를 달고있는 동안 볼 수 있습니다. 셸의 스크립트가 아닌 셸에서 직접 명령을 실행하면 모든 것이 작동합니다. 하지만 스크립트에 넣으면 실행 후 종료됩니다. –

+1

스크립트의 내용을 실행하는 데는 두 가지 방법이 있습니다. 스크립트를 제공하거나 스크립트를 실행할 수 있습니다. 스크립트를 소스 할 때 현재 쉘이 처리하므로 명령은 스크립트에 직접 입력 할 때와 동일하게 작동합니다. '를 사용하십시오. Scrpt' 이것을해라. 스크립트를 실행할 때 현재 쉘은 스크립트의 명령을 처리하기 위해 새 쉘을 시작합니다. 'bash Scpt' 또는'./Scpt'를 사용하십시오. 이 하위 쉘은 종료 할 때 자녀를 수확합니다. 즉, 하위 프로세스가 부모로부터 살해되지 않도록 보호하지 않는 한, 자식을 종료하고 종료 할 때까지 기다립니다. –

+0

Doug, 문제 해결, 큰 설명에 감사드립니다. 대신 ./Scrpt를 사용하고있었습니다. Scrpt 그리고 그것이 문제였습니다. +1. –