Bash에서 일시 중지 명령을 사용하는 실제 예는 무엇입니까?

Bash에서 일시 중지 명령을 사용하는 실제 예는 무엇입니까?

suspendBash에 내장된 명령입니다. 언제 이 명령을 자연스럽게 사용하고 유용하다고 생각하시나요?

답변1

screenGNU 및 tmux(및 X11이 없다고 가정하면 ,그리고가상 콘솔) 로그인 셸과 다른 대화형 셸 간에 전환하고 싶습니다.

먼저 콘솔에 로그인한 다음 새 셸을 시작하여 로그인 셸을 일시적으로 차단합니다. 로그인 셸을 반환하고 거기에서 일부 작업을 수행하려면 를 실행해야 합니다 suspend. fg그런 다음 대화형 셸로 돌아가서 거기서 수행하던 작업을 계속합니다.

실제로 작업 제어를 사용하면 로그인 쉘은 백그라운드 작업으로 여러 대화형 쉘을 생성할 수 있으며 이를 사용하여 전환할 수 있습니다. fg %1그러나 로그인 쉘로 돌아가려면 다음을 fg %2사용해야 합니다 .suspendkill -s STOP $$

또한 대화형 셸의 프롬프트에서 Ctrl+는 Z일시 중지되지 않는다는 점에 유의하세요.

편집하다:원래는 스크립트에서 사용하는 방법에 대한 긴 what-if 섹션이 있었지만 suspend명령에는 작업 제어가 필요하고 비대화형 쉘에는 일반적으로 작업 제어가 없기 때문에 해당 섹션을 제거했습니다.


제거된 부분은 suspend다음으로 대체됩니다 kill -s STOP $$(이것은 실제로 더 이상 답변에 속하지 않지만 어쨌든 다른 사람들에게 흥미로울 수 있습니다).

스크립트에 백그라운드 프로세스(스크립트)가 있고 어떤 단계에서 백그라운드 프로세스를 중지하고 상위 프로세스가 계속 실행하라고 지시할 때까지 기다려야 한다고 가정해 보겠습니다. 이는 부모에게 파일을 추출하여 제자리로 옮길 시간을 주기 위한 것일 수 있습니다.

하위 스크립트는 일시 중지()되고 상위 스크립트는 계속할 수 있을 때 kill -s STOP $$신호를 보냅니다 .CONT

이는 부모 프로세스와 자식 프로세스 사이에 일종의 동기화를 달성할 수 있는 기회를 제공합니다(매우 기본적이지만 부모 쉘 프로세스는 자식 프로세스가 중단되었다고 추측해야 하기 때문에 자식 프로세스를 허용하여 해결할 수 있음). ) CONT너무 이른 경우 이 신호가 수신되면 트랩되고 일시 중지되지 않습니다.)

관련 정보