그림 1 Terminal에서 CTRL+를 두 번 눌러도 응답이 없지만 CMatlab 명령줄에 두 개의 개행 문자가 나타납니다.
키바인딩에 뭔가 문제가 있는 것 같아요. 나는 Windows와 Emacs를 사용해 보았으나 성공하지 못했습니다. 키바인딩은 Mathematica에서 작동합니다. MathWorks for Matlab은 Debian 8.x를 지원하므로 지원되어야 합니다.
관련 조건
- Matlab 프롬프트에 입력하지 않고 CTRL+를 입력합니다.C죽이다하지만 개행
- ...
차등 솔루션
- Matlab 프롬프트를 열고 를 입력합니다
exit
. - 열려 있는시스템 모니터Matlab에 종료 및/또는 강제 종료 신호를 보냅니다.
Matlab: 2016a, 2016b 사전 릴리스
하드웨어: Asus Zenbook UX303UA
OS: Debian 8.5
Linux 커널: 4.6(백포트)
관련: [대부분 Matlab 프롬프트에 직접 입력하는 것과 관련된 내용을 찾지 못했습니다. 상황 관련]
MathWorks 서비스 티켓: 02154064
답변1
Ctrl+의 기본 의미는 CSIGINT 신호를 보내는 것입니다. SIGINT의 일반적인 의미는 현재 포그라운드에서 실행 중인 작업을 중지하고 사용자가 새로운 입력을 제공할 수 있도록 하는 것입니다. 나는 그것을 사용하고 있다일컴퓨터가 수행하는 작업의 비공식적 의미입니다. 이는 별도의 프로세스일 필요는 없습니다. Matlab과 같은 프로그램에서는 연속된 명령을 읽고 처리합니다.REPL— SIGINT는 프로그램을 종료하는 대신 사용자를 프로그램 프롬프트로 되돌려야 합니다. 포그라운드 작업이 작업을 수행한 다음 종료하는 프로그램인 경우 SIGINT는 사용자가 셸 프롬프트로 돌아가는 방식이므로 프로그램을 종료해야 합니다.
Ctrl+를 시도해 보세요 \. 이는 SIGQUIT 신호를 보냅니다. SIGQUIT의 일반적인 의미는 즉시 종료하고 (시스템이 이에 대해 구성된 경우)코어 덤프. 모든 프로그램이 이 의미를 유지하는 것은 아니며 Matlab이 이 의미를 유지하는지 모르겠습니다.
종료 신호 키가 작동하지 않으면 Ctrl+ ZSIGSTOP 전송을 시도하세요. 그러면 프로그램이 중단되고 다른 신호를 보낼 수 있는 쉘 프롬프트로 돌아갑니다. 작업을 일시 중지하면 셸에 다음과 같은 메시지가 표시됩니다.
[1]+ Stopped matlab
괄호 안의 숫자는 위치 번호입니다. %1
프로세스 ID 대신 해당 셸에서 프로세스에 신호를 보낼 수 있습니다 . 예를 들어 kill %1
여기서는 SIGTERM(정상 종료 신호)을 보냅니다. 그래도 작동하지 않으면 kill -KILL %1
(SIGKILL, 종료 신호를 주지 않고 신호 종료) 한 번만 적용해 보세요. .
해당 터미널에서 실행 중인 셸에 도달하기 위해 애플리케이션을 중단할 수 없는 경우 다른 터미널에서 실행 중인 다른 셸에서 애플리케이션을 종료하세요.
답변2
MATLAB은 수학이 아닙니다. 오히려 MATLAB 프로그래머는 ^C
시작 중에 SIGINT( s)를 차단하거나 명령 프롬프트 모드에서 개행 문자를 내보내는 사용자 정의 핸들러를 설치하기로 결정한 것으로 보입니다. 이는 쉘 환경의 일반적인 동작입니다.
답변3
Ctrl-C를 입력해도 쉘은 사라지지 않습니다. 현재 명령줄이 취소되고 쉘이 종료되고 로그아웃되거나 이전 프로그램으로 돌아가는 대신 새 프롬프트가 표시됩니다.
Bash와 같은 시스템 명령 셸은 소프트웨어일 뿐입니다. 다른 프로그래밍 언어 셸도 동일한 기술을 사용하여 프로그래밍할 수 있습니다.
일반적인 프로그래밍 언어 셸은 대화형 편집 모드에 있고 TTY는 원시 모드에 있으며 Ctrl-C는 일반 문자입니다. 현재 명령줄 작업 취소는 Ctrl-C 키에 바인딩된 특수한 유형의 편집 명령으로 구현될 수 있습니다.
또한 일부 프로그래밍 언어 셸에서는 코드 계산을 중단할 수 있습니다. 이는 일반적 으로 코드가 실행되는 동안 Ctrl-C를 신호 생성 및 SIGINT
처리 에 매핑하는 일반 설정으로 TTY 모드를 복원함으로써 수행됩니다. 어떻게든 처리는 실행 중인 코드의 취소로 변환됩니다. C로 작성된 인터프리터는 longjmp
대화형 프롬프트에 의해 설정된 위치에서 실행될 수 있습니다. setjmp
신호 SIGINT
처리기 자체는 "인터럽트 발생"이라는 전역 변수를 설정할 수도 있습니다. 인터프리터는 때때로 이 변수를 확인하여 예외로 변환할 수 있습니다. 이렇게 하면 신호 처리기에서 벗어나는 복잡성이 추가되는 것을 방지할 수 있습니다.