"yes&"가 Bash 세션을 중단시키는 이유는 무엇입니까?

"yes&"가 Bash 세션을 중단시키는 이유는 무엇입니까?

“예, 그리고…”는 즉흥 코미디의 훌륭한 경험 법칙입니다. UNIX 세계에서는 그렇지 않습니다.

이 어리석은 명령을 실행하면 yes&중단할 수 없습니다. 터미널이 충돌하거나 루프에 갇히게 됩니다.

yesstdout에 쓰려고 하면 백그라운드의 모든 프로세스가 일시 중지되어야 하기 때문에 프로세스가 즉시 일시 중지되기를 원 하지만 그렇지 않은 것 같고 그 이유를 알고 싶습니다.

답변1

터미널에 대한 백그라운드 프로세스 쓰기는 출력 모드가 설정된 경우에만 일시 중지되지만 TOSTOP기본적으로는 그렇지 않습니다. 노력하다

stty tostop
yes &

yes일시중지된 것을 볼 수 있습니다 .

백스테이지 과정읽다기본적으로 터미널에서의 작업은 올바른 입력을 얻을 수 있는 합리적인 방법이 없기 때문에 일시 중지됩니다.

바라보다터미널 액세스에 대한 GNU C 라이브러리 매뉴얼 섹션.

을 닫은 후에도 TOSTOP터미널은 충돌하거나 중단되지 않으며 여전히 입력에 응답합니다. 따라서 터미널 yes을 종료하거나( kill %유일한 백그라운드 작업인 경우) 포그라운드로 가져오고 fg( CtrlC) 중지 하여 이를 수행할 수 있습니다. 배경. 맹목적으로 명령을 입력해야 하지만 작동합니다.

답변2

Stephen의 답변은 매우 훌륭하지만 프로세스를 전면으로 가져온 다음 중단하여 bash 세션에 대한 제어권을 다시 얻을 수 있다는 점을 덧붙이고 싶습니다.

$ yes &
y
y
y
y
...

표시되지 않더라도 다음을 입력하세요.

fgEnter그런 다음Ctrl-C

fgCtrl-C백그라운드 작업을 다시 포그라운드로 이동하고 현재 작업에 신호를 보내는 작업 제어 명령입니다 . SIGINT여러 개의 백그라운드 작업이 있는 경우 포그라운드로 이동할 작업을 지정하는 매개변수를 fg뒤에 붙일 수 있습니다 . 자세한 내용은 매뉴얼 페이지 jobspec에 있습니다 .bash

관련 정보