Linux 傳送訊號, 修改鍵對映

2021-07-04 01:43:33 字數 1676 閱讀 3175

遇到乙個問題, 用ssh 工具登陸遠端linux 系統後, 使用 sqlplus 會出現問題, 比如輸入 eixt, 發現輸入錯誤, 然後backspace 想刪除這些字元, 發現沒有刪除字元, 卻出現了 ^h 符號.

這個原因是我的計算機上傳送的訊號是 ^h, 但是在遠端 linux 上erase 訊號對映到 ^? 訊號.

可以用 stty -a 來檢視 遠端 linux 上的鍵對映:

[oracle@erik-lnx admin_scripts_home]$ stty -a

speed

38400

baud; rows

39; columns

173; line = 0;

intr =

^c; quit = ^\; erase = ^?; kill =

^u; eof =

^d; eol = ; eol2 = ; swtch = ; start =

^q; stop =

^s; susp =

^z; rprnt =

^r; werase =

^w; lnext = ^v;

flush =

^o; min =

1; time = 0;

-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr

-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

然後 ctrl+v, 按 backspace 看看傳送的字元是什麼: ^h

然後重新設定鍵對映: stty erase ^h

這樣我傳送的 ^h 就會被對映為 erase 訊號, 刪除字元就正常工作了;

造成這個問題的原因其實是我使用的終端模擬器和遠端linux 使用的終端其實不一致.

檢視遠端 linux 的終端型別: echo $term = xterm

我現在使用的ssh 工具是 xshell, 在設定裡面可以選擇終端模擬器,

要麼修改遠端linux 上的鍵對映, 要麼修改ssh 工具的傳送訊號.

總結一下:

1. echo $term 檢視終端型別

2. 設定 ssh 工具的終端型別, 保持一致

3. stty -a 檢視鍵對映

4. ctrl+v 按鍵, 檢視ssh 工具傳送的字元

5. stty 訊號 字元, 修改鍵對映, 或者修改ssh 工具按鍵傳送的字元

xshell backspace 按鍵 -> 傳送 ^h 字元 -> linux 接收 ^h 字元 -> ^h 對映到 erase 訊號

UNIX再學習 傳送訊號

傳送訊號的方式有幾種 sigint 2 ctrl c 中斷符 sigquit 3 ctrl 退出符 sigtstp 20 ctrl z 停止符 sigill 4 程序試圖執行非法指令 sigbus 7 硬體或對齊錯誤 sigfpe 8 算術異常 sigsegv 11 無法記憶體訪問 sigpipe ...

pthread kill 向執行緒傳送訊號

別被名字嚇到,pthread kill可不是kill,而是向執行緒傳送signal。還記得signal嗎,大部分signal的預設動作是終止程序的執行,所以,我們才要用signal 去抓訊號並加上處理函式。int pthread kill pthread t thread,int sig 向指定id...

Linux下父程序向子程序傳送訊號

需要用到的函式 kill int kill pid,sig int pid,sig 其中,pid是乙個或一組程序的識別符號,引數sig是要傳送的軟中斷訊號。1 pid 0時,核心將訊號傳送給程序pid。2 pid 0時,核心將訊號傳送給與傳送程序同組的所有程序。3 pid 1時,核心將訊號傳送給所有...