[linux] 비동기 셸 명령

셸 스크립트를 사용하여 명령을 시작하려고합니다. 나는 그것이 끝나는 지 / 언제 / 어떻게 / 왜 완료되는지 상관하지 않습니다. 프로세스가 시작되고 실행되기를 원하지만 즉시 쉘로 돌아갈 수 있기를 원합니다.



답변

백그라운드에서 스크립트를 실행할 수 있습니다.

$ myscript &

이것은 &스크립트 내부에 넣는 것과는 다르므로 원하는 작업을 수행하지 못할 수 있습니다.


답변

모두가 잊어 버렸습니다 disown. 그래서 다음은 요약입니다.

  • & 작업을 백그라운드에 둡니다.

    • 입력을 읽으려는 시도를 차단하고
    • 쉘이 완료 될 때까지 기다리지 않도록합니다.
  • disown 쉘의 작업 제어에서 프로세스를 제거하지만 여전히 터미널에 연결된 상태로 둡니다.

    • 결과 중 하나는 쉘이 a를 보내지 않는다는 것입니다 SIGHUP(쉘이를 받으면 프로세스에 SIGHUPa도 보내며 SIGHUP일반적으로 프로세스가 종료됩니다).
    • 그리고 분명히 백그라운드 작업에만 적용 할 수 있습니다 (포 그라운드 작업이 실행 중일 때는 입력 할 수 없기 때문입니다).
  • nohup단말에서 처리를 끊은 그 출력 리디렉션 nohup.out및 실드를 발 SIGHUP.

    • 이 프로세스는 전송 된 SIGHUP.
    • 작업 제어와 완전히 독립적이며 원칙적으로 포 그라운드 작업에도 사용할 수 있습니다 (그다지 유용하지는 않습니다).
    • 일반적으로 &(백그라운드 작업으로) 와 함께 사용됩니다 .

답변

nohup cmd

단말기를 닫아도 끊지 않습니다. 기본적으로 출력은 nohup.out으로 이동합니다.

이것을 배경과 결합 할 수 있습니다.

nohup cmd &

출력을 제거하고

nohup cmd > /dev/null 2>&1 &

disown명령 도 가능 합니다. 입력 cmd, Ctrl-Z, bg,disown


답변

또는 프로그램을 실행 한 후 Ctrl-Z를 눌러 프로그램을 중지하고 다음을 입력 할 수 있습니다.

bg

마지막으로 중지 된 프로그램을 백그라운드에 둡니다. ( ‘&’없이 무언가를 시작했지만 다시 시작하지 않고 backgroung에서 원하는 경우 유용합니다)


답변

screen -m -d $command$분리 된 세션에서 명령을 시작합니다. screen -r시작된 세션에 연결하는 데 사용할 수 있습니다 . 원격 세션에도 매우 유용한 훌륭한 도구입니다. 에서 자세히 알아보십시오 man screen.


답변