遇到乙個問題, 用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時,核心將訊號傳送給所有...