나는 tty에 자유롭게 쓰는 백그라운드 프로세스를 좋아합니다. stty -tostop
내 zsh에는 이미 기본값이 있습니다(이유는 모르겠지만 아마도 OhMyzsh 때문일까요?).
❯ stty -a |rg tostop
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
하지만 여전히 가끔 백그라운드 프로세스가 일시 중지되는 경우가 있습니다(이는 일관된 동작이 아니며 재현 방법을 모르겠습니다).
[1] + 3479064 suspended (tty output)
답변1
TCSETSW
프로세스가 터미널의 포그라운드 프로세스 그룹에 속하지 않는 경우 TCSETS
ioctl()
(예: libc 함수를 사용할 때 ), 활성화 tcsetattr()
여부에 관계없이 tty 라인 규칙 설정이 설정됩니다(예: 대화형 셸에서 백그라운드에서 호출되는 경우). tostop
영향을 미치다쓰다터미널로).
$ stty echo &
[1] 290008
[1] + suspended (tty output) stty echo
자세한 내용은 info libc SIGTTOU
GNU 시스템을 참조하세요.
매크로: int SIGTTOU
SIGTTIN
이는 백그라운드 작업의 프로세스가 터미널에 쓰기를 시도할 때 와 비슷 하지만 생성됩니다.또는 모드를 설정하세요. 다시 말하지만, 기본 작업은 프로세스를 중지하는 것입니다. 출력 모드가 설정된 경우SIGTTOU
터미널에 쓰려고 할 때만 생성됩니다.TOSTOP
(강조는 내 것)
나는 이것이 이것의 유일한 이유는 아니라고 생각합니다 ioctl()
. 리눅스 커널 소스 코드를 대충 살펴보면 TCXONC
( tcflow()
)와 TCFLSH
( tcflush()
)도 같아야 할 것 같습니다.