ctrl+u가 SIGKILL을 보내지 않는 이유는 무엇입니까? stty가 그래야 한다고 말했어

ctrl+u가 SIGKILL을 보내지 않는 이유는 무엇입니까? stty가 그래야 한다고 말했어

ctrl+c쉘을 눌러 프로그램을 중단할 수 있습니다. 일반적으로 이로 인해 프로그램이 종료되지만 일부 프로그램은 신호를 포착하고 계속 실행됩니다.

그런 프로그램을 좀 더 적극적으로 죽이고 연구를 좀 했으면 좋겠다. tty 단축키가 나열 된다는 것을 읽었습니다 stty -a. 출력은 다음과 같습니다.

speed 38400 baud; rows 27; columns 213; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

내가 당신의 관심을 끌도록 해주세요

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; [...]

그 중 두 개는 친숙해 보입니다. ^C^D는 sigkill을 보내야 하는 것처럼 보입니다. ^U제 생각에는 sigkill이 되어야 한다고 생각합니다 kill -9.

내 특별한 경우에는 ddd를 종료하고 싶습니다. 그렇지 않으면 종료하기 어려울 때가 있습니다. 쉘을 종료 하면 PID가 쉘을 종료 crtl+u하더라도 아무 효과가 없습니다 .kill -9

이 출력에 대한 해석이 잘못되었나요 stty -a? ctrl+uSIGKILL을 보내야 합니까 ? 예상대로 작동하지 않는 이유는 무엇입니까? 또는 쉘(즉, ddd를 시작한 쉘)에서 SIGKILL을 쉽게 보낼 수 있는 방법은 무엇입니까?

답변1

그 살인은 신호 사망이 아니라 인격 암살이었습니다. 매뉴얼 termios(4)페이지에 문서화되어 있어야 합니다.

지우기 및 종료 처리는 두 개의 특수 문자인 ERASE 및 KILL 문자(특수 문자 섹션 참조) 중 하나가 수신될 때 발생합니다. 이 처리는 아직 개행 NL, EOF 또는 EOL 문자로 구분되지 않은 입력 큐의 데이터에 영향을 줍니다. 이 무제한 데이터는 현재 행을 구성합니다. ERASE 문자는 현재 행의 마지막 문자(있는 경우)를 삭제합니다. KILL 문자는 현재 행에 있는 모든 데이터를 삭제합니다.

아니면 termios(3)리눅스에서

VKILL(025, NAK, Ctrl-U, Ctrl-X 또는 @) 문자 삭제(KILL). 마지막 EOF 또는 줄 시작 이후의 입력이 지워집니다. ICANON이 설정된 경우 인식된 후 입력으로 전달되지 않습니다.

관련 정보