포그라운드 프로세스에서 SIGTTIN SIGTTOU를 보내고 포착하시겠습니까?

포그라운드 프로세스에서 SIGTTIN SIGTTOU를 보내고 포착하시겠습니까?

신호의 설명에 따르면 (인용하다), SIGTTIN 및 SIGTTOU는 백그라운드에 있을 때만 프로세스로 전송되는 것 같습니다. 이러한 흐름 제어가 활성화된 경우 키를 누르면 Ctrl-s터미널에서 인쇄가 중지됩니다. 따라서 문제는 SIGTTIN/SIGTTOU 신호를 현재 포그라운드에 있는 프로세스에 실제로 전달하고 이를 포착하는 것이 가능합니까?입니다.

예를 들어 다음 코드를 파일에 저장 chmod +x하고 실행해 보세요. 그런 다음 Ctrl-s/ 를 누르십시오 Ctrl-q. 인쇄가 Ctrl-s중지되었다가 다시 시작되는 것을 확인할 수 있습니다 Ctrl-q. 그러나 파일 ./trap.log파일은 비어 있습니다.

#!/usr/bin/env zsh
touch ./trap.log
trap 'echo TSTP >>./trap.log' TSTP
trap 'echo TTIN >>./trap.log' TTIN
trap 'echo TTOU >>./trap.log' TTOU
trap 'echo CONT >>./trap.log' CONT
for ((i=1;i>0;i=i+1)); do
    printf "print $i\n"
    sleep 1
done

답변1

kill다른 신호와 마찬가지로 SIGTTIN 또는 SIGTTOU를 보낼 수 있습니다 . trap다른 (잡을 수 있는) 신호와 마찬가지로 (sh에서) 이를 잡을 수 있습니다 . 그러나 그것은 신호 Ctrl+S와 관련이 없습니다 Ctrl+Q. 이는 애플리케이션이 아닌 터미널에서 처리됩니다.

애플리케이션이 이를 "출력 일시 중지" 명령으로 처리하도록 하려면 Ctrl+S터미널이 이러한 문자( stty -ixoff또는 tcsetattr동등한 문자)를 캡처하지 않고 다른 입력처럼 처리하는지 확인하십시오.

관련 정보