Ctrl + c는 프로세스를 종료하지 않습니다

Ctrl + c는 프로세스를 종료하지 않습니다

나는 답변을 찾고 있지만 지금까지 내 질문에 대한 답변을 찾지 못했습니다. 현재 Ubuntu 서버에 로그인되어 있으며 프로세스가 실행되는 동안에는 인터럽트가 실행되지 않습니다. 이것은 내 stty -a입니다.

user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;

내 .bashrc에는 인터럽트를 변경할 항목이 없습니다.

이는 루트를 포함한 모든 사용자에게 동일합니다. 또한 다른 터미널을 사용하여 다른 위치에서 로그인을 시도했지만 매번 동일한 결과가 나왔습니다. ssh와 ssh -X를 사용하여 로그인했습니다.

편집: 로컬에서는 모든 인터럽트가 정상적으로 작동합니다.

업데이트: 아직 답변을 찾고 있습니다. 내 친구도 같은 문제가 있습니다. 문제는 심각한 것 같습니다. 로그인할 때(PC, Mac, Linux에서) 키보드가 이러한 키를 인식하지 못합니다(매핑이 정확함에도 불구하고).

답변1

ctrl+ c프로그램을 종료하지 마십시오.

그것은 그런 일이 아닙니다.

POSIX 표준은 실행 중인 프로그램을 제어하는 ​​데 사용되는 신호 세트를 정의합니다.

  First the signals described in the original POSIX.1-1990 standard.
  Signal     Value     Action   Comment
  ──────────────────────────────────────────────────────────────────────
  SIGHUP        1       Term    Hangup detected on controlling terminal
                                or death of controlling process
  SIGINT        2       Term    Interrupt from keyboard
  SIGQUIT       3       Core    Quit from keyboard
  SIGILL        4       Core    Illegal Instruction
  SIGABRT       6       Core    Abort signal from abort(3)
  SIGFPE        8       Core    Floating point exception
  SIGKILL       9       Term    Kill signal
  SIGSEGV      11       Core    Invalid memory reference
  SIGPIPE      13       Term    Broken pipe: write to pipe with no
  SIGTERM      15       Term    Termination signal

-http://man7.org/linux/man-pages/man7/signal.7.html

ctrl+ 터미널에서 실행하는 프로그램에 c"키보드 인터럽트" 신호를 보냅니다 .2

해당 신호를 처리하는 것은 전적으로 프로그램에 달려 있으며 원하는 것은 무엇이든 할 수 있습니다. 많은 스크립팅 언어 해석기는 기본적으로 호출된 스크립트를 종료하고 정상적으로 종료하여 이를 처리할 수 있습니다.

특히 자동 컨텍스트에서 프로그램을 종료하려면 killid(pid)로 프로세스에 신호를 보내는 데 사용할 수 있는 singal 15를 사용하는 것이 좋습니다.

kill -15 <pid>

내가 아는 한, 프로그램 자체는 여전히 이 신호를 수신하며 가능한 한 깔끔하게 종료되어야 합니다.

프로그램이 신호 15를 무시하고 프로그램이 여전히 존재하는 경우(그리고 권한 오류로 인해 신호 전송이 중단되지 않는 경우)

kill -9 <pid>

내가 아는 한, 신호 9는 커널(작업 관리자 및 하드웨어 인터페이스)에 의해 해석되고 커널이 갑자기 프로그램 처리를 중단하고 모든 리소스를 할당 해제/해제합니다.

답변2

다음은 몇 가지 하드코어 팁입니다.

Control-Z

프로세스를 일시 중지하고 프로세스의 작업 ID를 반환합니다.

그 다음에:

kill -9 %1

(1을 작업 ID로 바꾸세요).

참고: 백분율은 필수입니다! 그렇지 않으면 init 프로세스가 종료됩니다. 즉, 커널이 종료되고 전체 시스템이 충돌하게 됩니다(그러므로 중간에 공백을 넣지 마십시오 :)

답변3

내가 추측해야 한다면 아마도 터미널 설정에서 Ctrl"복사"에 +를 매핑 했기 때문일 것입니다. + + C로 변경하면 + 가 다시 제대로 작동하여 프로세스가 중지됩니다.CtrlShiftCCtrlC

답변4

나는 이것을 만났다이전 포럼 게시물이 특별한 질문에 관해서. 기본 인터럽트 시퀀스는 별도의 구성 파일에서 재정의될 수 있는 것으로 보입니다.

이 프로세스를 외부적으로 종료하려면 kill을 사용할 수 있지만 이 섹션에 설명된 대로 kill을 업그레이드해야 한다는 점에 유의하세요.프로세스 종료에 관한 기사, 가장 극단적인 킬 -9로 점프하는 대신.

위키피디아는 훌륭해요프로그램 리소스 종료. 여기 또 하나 있어요유닉스 신호 목록그리고 그들이 하는 일.

관련 정보