서브 프로세스가 터미널의 포 그라운드 프로세스 그룹의 유일한 구성원이기 때문에 배쉬는 터미널 프로세스가 시작되면 터미널 입력과 터미널에서 생성 된 신호 (예 : SIGINT)를 보지 못합니다. 하위 프로세스가 종료되면 Bash는 터미널을 다시 보게됩니다.
bash에서 SIGINT를 무시하면 서브 프로세스가 시그널 핸들러가 할당되지 않은 신호의 처리를 상속하기 때문에 작동합니다.
stty
을 사용하여 SIGINT를 다른 키보드 기호 (또는 키보드 기호 없음)에 재 할당 할 수 있습니다. 하위 프로세스는 해당 설정을 상속받습니다. 이렇게하면 ctrl-C가 일반 문자가되어 하위 프로세스가 중단되지 않습니다. 불행히도, 그것은 bash도 방해하지 않을 것입니다, 그래서 그것은 정말로 해결책이 아닙니다.
pseudoterminal (pty)을 만들고 pseudo-tty의 슬레이브 끝 부분에 하위 프로세스를 연결하여 더 많은 제어 권한을 부여하는 하위 프로세스를 만들 수 있습니다. 그런 다음, pty의 마스터쪽에 데이터를 쓰고 터미널에서 읽은 입력을 전달할 수 있으며, 마스터 쪽에서 읽은 다음 터미널에 쓰면 서브 프로세스의 출력을 터미널에 다시 전달할 수 있습니다. 이 구성에서는 마스터 프로세스에서 SIGINT를 트랩하고 서브 프로세스로 전달하지 않을 수 있습니다. 그러나 시스템 기능에 대한 액세스를 제공하는 언어 (반드시 C는 아님)로 작성해야합니다. 그것은 bash에서 가능할 수도 있지만 꽤 해킹 될 것입니다. 시작 위치에 대한 자세한 내용은 man pty
을 참조하십시오.
'ctrl_c_handler()'의 끝 부분에 넣을 수있는 커맨드 셋을 만들기 전에 정말로 똑똑한 "점프 지점으로 돌아 가기"않는 한 이것이 가능하지 않다고 생각합니다. – Mort