키 바인딩을 사용하여 터미널 에뮬레이터의 현재 프로세스에 KILL 신호를 보낼 수 있나요?

키 바인딩을 사용하여 터미널 에뮬레이터의 현재 프로세스에 KILL 신호를 보낼 수 있나요?

Bash 터미널 에뮬레이터는 및 각각을 통해 및 프로세스로 보낼 수 있습니다 SIGINT.SIGSTOP SIGTSTPC-cC-z(1) (2)

두 신호( )를 모두 무시하는 프로세스가 있습니까 tmux wait-for hello? PID를 조회하고 키 바인딩(예: send를 통해 SIGKILL)을 통해 신호를 보내지 않고 이 프로세스를 종료하는 쉬운 방법이 있습니까?

답변1

이 가정은 올바르지 않습니다. 이러한 키 조합은 셸이 아닌 터미널(에뮬레이터)에 의해 해석됩니다. 쉘은 그것들을 볼 수 없습니다.

를 사용하여 포그라운드 프로세스를 중지 ^Z한 다음 실행할 수 있습니다 kill -KILL %%. 아마도 키바인딩을 사용하여 두 번째 부분을 수행할 수 있을 것입니다.

답변2

SIGINT/SIGQUIT/SIGTSTP를 보내는 것은 터미널 에뮬레이터가 아니라 커널의 터미널 또는 의사 터미널 장치 드라이버입니다.

예를 들어, 직렬 연결을 통해 터미널로부터 문자(바이트)가 수신되거나 의사 터미널의 마스터 측에 있는 터미널 에뮬레이터로부터 문자(바이트)가 수신될 때 커널이 프로세스의 모든 프로세스에 SIGINT 신호를 보내 도록 구성되었다고 가정 stty intr '^C'합니다. ^C.0x3포그라운드 프로세스 그룹tty 장치(그리고 주어진 시간에 어떤 프로세스 그룹이 전경인지 결정하는 것은 대화형 셸입니다).

적어도 Linux에는 포그라운드 프로세스 그룹으로 전송되는 SIGKILL 신호에 문자를 매핑하기 위한 동등한 터미널 드라이버(termios) 설정이 없습니다.

터미널 에뮬레이터는 xtermSIGKILL을 포함한 여러 신호와 send-signal(kill)특정 X11 이벤트(예: KeyPress 이벤트)에 대한 작업을 보내도록 구성할 수 있습니다.

xterm -xrm 'XTerm.VT100.translations: #override Ctrl <Key>k: send-signal(kill)'

예를 들어 xterm+에 SIGKILL을 보내는 프로그램이 시작됩니다.Ctrlk

+MouseButton1 을 사용하면 기본 메뉴 Ctrl항목에서도 동일한 작업을 수행할 수 있습니다 Send KILL Signal.

그러나 슬레이브 터미널 장치의 전경 프로세스 그룹이 아니라 일반적으로 쉘을 실행하기 위해 자체적으로 생성하는 프로세스 그룹으로 보냅니다. 그래서 아마도 당신이 원하는 대로 되지 않을 것입니다.

터미널 에뮬레이터가 SIGKILL을 전경 프로세스 그룹에 보내도록 하는 방법을 찾았다고 해도 우선 프로세스가 다른 uid로 실행 중이면 그렇게 할 수 없으며, 무엇을 하지 않을 것입니다. 예를 들어 A 이ssh//... 이후에 포그라운드 프로세스 그룹에 신호를 보내야 하기 때문에 세션이 시작됩니다.scriptscreen그들의터미널 장비.

답변3

GUI 터미널 에뮬레이터를 사용하는 경우 SIGKILL을 보낼 가능성이 높습니다. 해당 메뉴를 확인하세요. 저는 Konsole을 사용하는데 편집 메뉴에 SIGKILL과 같은 신호를 보낼 수 있는 "신호 보내기" 하위 메뉴가 있습니다.

관련 정보