一部の端末プログラムには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
キー入力と信号は、プログラムと通信する2つの異なる方法です。プログラムにキーを押すのと同じ信号がある場合、これはプログラムの作成者がそのように設計したためです。
端末自体は、いくつかのキーをCtrl+CからSIGINTなどの信号に変換します。プログラムは、端末がキー入力を信号に変換するのではなく、これらのキー入力自体をキャプチャするように端末設定を変更できます。同じターミナルメカニズムを使用すると、キー(通常はCtrl+ D)を使用して入力端に切り替えることができます(行の先頭でキーを押した場合のみ)。これは信号ではありません。これは、プログラムが端末から入力を読み取ろうとしたときに、ファイル終了マークを受け取ったことを意味します。
端末が消えると、カーネルは端末で実行されているフォアグラウンドプログラム(存在する場合)にSIGHUP信号を送信します(シェルの場合、シェルはフォアグラウンドジョブに信号を再送信します)。 HUPは「(モデム)停止」に由来し、現代ではGUIで端末ウィンドウを閉じるなどの状況に適用されます.多くのプログラムがこの信号を捕捉して安全に閉じるため、入力を送信するよりも信号を送信する方が便利な場合は、これがプログラムに適していることを確認する必要があります。
入力を送信する必要がある場合は、最も簡単な方法はプログラムを実行することです。画面screen -X
スクリーンセッションに入力を送信するために使用されます(はい)。
答え2
$ consumer << DOCUMENT
Bashで入力を使用できます。入力の待ち時間が長くなるようにするには、プログラムにパイプする前にオンラインで入力されたコマンドを読んで解析することをお勧めします。
analyze <<END
<your timed command>