Bash에서 suspend 명령을 사용하는 실제 예는 무엇입니까?


12

suspendBash의 기본 제공 명령입니다. 자연스럽게이 명령을 언제 사용하고 유용하다고 생각하십니까?


1
쉘은 자식 프로세스를 분기 할 때마다 일시 중지됩니다. 즉, 해당 명령이 외부 프로그램 인 명령을 실행하여 fork/exec시스템 호출이 필요합니다
the_velour_fog

1
대화식 쉘에서 이것은 자식 프로세스가 터미널을 제어 할 수있게하는 반면 부모 쉘이 터미널과 상호 작용하지 않도록하는 것은 혼란스러워집니다.
the_velour_fog

2
@velour,하지만 그 효과를 위해 별도의 명령을 실행할 필요가 없습니까?
ilkkachu

@the_velour_fog 기술적으로 부모 STOP프로세스는 자식 프로세스를 분기 할 때 일시 중단되지 않습니다 ( 신호를 받지 않음 ). 나는 또한 두 번째 의견에 약간 혼란 스럽습니다.
Kusalananda

1
@ Kusalananda 좋아, wait()나에게 합리적인 소리. 나는 쉘이 자식 프로세스를 분기 할 때마다 일시 중단 된다고 말했다 . 나는 정지 신호 수신에 대해 아무 말도하지 않았다.
the_velour_fog

답변:


14

GNU screentmuxX11 가상 콘솔 이 모두 없지만 로그인 셸과 다른 대화식 셸간에 전환하려고 한다고 가정 해 보겠습니다 .

먼저 콘솔에서 로그인 한 다음 새 셸을 시작하여 로그인 셸을 일시적으로 차단합니다. 로그인 셸을 다시 사용하여 작업을 수행하려면을 수행하십시오 suspend. 그런 다음 fg대화식 쉘을 다시 가져 와서 수행했던 작업을 계속하십시오.

사실, 작업 제어와 함께, 로그인 쉘은 당신이로 전환 할 수 있음을 백그라운드 작업으로 대화 형 쉘의 숫자 산란 수 fg %1, fg %2등,하지만 다시 로그인 쉘을 얻을 수를, 당신은 사용할 필요가 suspend수동에 싶어하지 않는 한 kill -s STOP $$.

또한 대화식 쉘의 프롬프트에서 Ctrl+ Z는 일시 중단되지 않습니다.

편집 : 처음에는 suspend스크립트에서 사용에 관한 긴 가상 섹션이 있었지만 명령에는 작업 제어가 필요하고 비 대화식 쉘에는 일반적으로 작업 제어가 없으므로 해당 섹션을 삭제했습니다.


suspend대체 된 섹션을 삭제 했습니다 kill -s STOP $$(이것은 더 이상 답변에 속하지 않지만 다른 사람들에게는 흥미로울 수 있습니다).

스크립트에 백그라운드 프로세스 (스크립트)가 있고 어떤 단계에서이 백그라운드 프로세스가 중지되고 상위 프로세스가 계속 진행할 때까지 기다려야한다고 가정 해 봅시다. 이것은 부모가 파일을 추출하고 그와 비슷한 것으로 이동할 시간을 갖도록 할 수 있습니다.

자식 스크립트는 일시 중단되고 ( kill -s STOP $$) 부모 스크립트는 CONT계속해도 괜찮을 때 신호를 보냅니다 .

그것은 부모 프로세스와 자식 프로세스 사이에 일종의 동기화를 구현할 수있는 기회를 제공합니다 (부모 쉘 프로세스는 자식 프로세스가 일시 중단되었다고 추측 할 필요성이 거의 없지만 기본적으로 자식 프로세스를 통해 해결할 수는 있지만) CONT해당 신호가 너무 일찍 수신되면 트랩 하지 않고 일시 중단하지 않습니다).

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