백그라운드 프로세스를 생성할 수 없습니다.

백그라운드 프로세스를 생성할 수 없습니다.

우리 팀은 서버 구성을 자동화하기 위해 Pallet(Clojure의 Puppet을 생각해 보세요)을 사용했지만 상당히 기본적인 문제에 직면했습니다. Pallet은 대상 VM에서 직접 임의의 스크립트를 실행할 수 있지만 스크립트 중 하나가 명령을 실행하는 경우에는 문제가 발생했습니다. 실행되지 않습니다. 적어도 우리가 디자인하는 방식에서는 그렇지 않습니다.

우리는 &와 screen을 사용하여 이 작업을 시도했는데 후자가 이상적이지만 둘 다 작동하지 않습니다. 예를 들어, Pallet이 대상 가상 머신에서 다음 스크립트를 실행하도록 하려고 합니다.

touch a
touch b &
touch c

우리가 원격으로 보는 것은 파일 a와 c가 존재한다는 것뿐입니다. 기본 스크립트를 실행하는 셸(또는 프로세스를 의미합니까?)은 "touch b" 실행을 거부합니다. 반면에 동일한 호스트에서 일반 터미널 세션을 사용하여 이 스크립트를 실행하면 제대로 작동합니다.

물론 우리는 Pallet의 관점에서 이 문제에 접근합니다. 그러나 이것이 아무 것도 초래하지 않으면 쉘이 어떤 상황에서 백그라운드 프로세스 실행을 거부하는지 누군가 말해 줄 수 있습니까? 문제를 해결하는 방법에 대한 단서를 제공할 수 있습니까?

우리는 CentOS 6.5 64비트를 사용하고 있지만 이것이 관련성이 없다고 생각합니다.

답변1

노력하다:

touch b & disown

부모 프로세스가 종료되었기 때문에 신호에 의해 자식 프로세스가 종료될 수도 있습니다. help disown부인의 역할을 보는 데 사용됩니다 .

nohup동일한 작업을 수행하는 별도의 프로그램이 있지만 이는 모든 쉘에서 작동합니다.

nohup touch b

관련 정보