잠시 실행한 후 프로그램에 종료 키(Q+Enter)를 보냅니다.

잠시 실행한 후 프로그램에 종료 키(Q+Enter)를 보냅니다.

일부 터미널 프로그램에는 Esc 키가 있습니다.안전하게실행을 중지합니다. 예를 들면 다음과 같습니다.

Q+Enter

~에서이 문제나는 이 timeout명령을 사용하면 지정된 시간 후에 신호가 프로그램에 전송될 수 있다는 것을 이해합니다. 그러나 내가 아는 한 이러한 신호 중 어느 것도 내가 언급하는 종료 키 누르기와 동일하지 않습니다.

다음 명령을 사용하여 신호 목록을 표시할 수 있습니다 kill -l.

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

프로그램이 안전하게 중지될 수 있도록 일정 시간이 지난 후 프로그램에 종료 키 누르기( echo문자 )를 보내고 싶습니다.q

어떻게 해야 합니까?

답변1

키 입력과 신호는 프로그램과 통신하는 두 가지 다른 방법입니다. 프로그램에 키 누르기와 동일한 신호가 있는 경우 이는 프로그램 작성자가 그렇게 설계했기 때문입니다.

터미널 자체는 일부 키를 Ctrl+ C에서 SIGINT와 같은 신호로 변환합니다. 프로그램은 터미널이 키 입력을 신호로 변환하도록 하는 대신 이러한 키 입력 자체를 캡처하도록 터미널 설정을 변경할 수 있습니다. 동일한 터미널 메커니즘을 사용하면 키(일반적으로 Ctrl+ D)를 사용하여 입력 끝으로 전환할 수 있습니다(줄 시작 부분에서 키를 누른 경우에만). 이는 신호가 아닙니다. 이는 프로그램이 터미널에서 입력을 읽으려고 시도하는 동안 파일 끝 표시를 수신했음을 의미합니다.

터미널이 사라지면 커널은 터미널에서 실행 중인 포그라운드 프로그램(있는 경우)에 SIGHUP 신호를 보냅니다(쉘의 경우 쉘은 포그라운드 작업에 신호를 다시 보냅니다). HUP는 "(모뎀) 정지"에서 유래되었으며, 현대에서는 GUI에서 터미널 창을 닫는 등의 상황에 적용됩니다. 많은 프로그램이 이 신호를 포착하고 안전하게 닫히므로 입력을 보내는 것보다 신호를 보내는 것이 더 편리한 경우 이것이 프로그램에 적합한지 확인해야 합니다.

입력을 보내야 하는 경우 가장 쉬운 방법은 프로그램을 실행하는 것입니다.화면screen -X스크린 세션에 입력을 보내는 데 사용됩니다 ().

답변2

$ consumer << DOCUMENTBash에서 입력을 사용할 수 있습니다 . 입력의 대기 시간이 길어지도록 하려면 프로그램에 파이프하기 전에 온라인으로 입력된 명령을 읽고 구문 분석하는 것이 좋습니다.

analyze <<END
<your timed command>

관련 정보