當 console 壞掉的時候 ...
這是今天在工作上看到的一個小技巧,所以把它記錄下來。在程式開發的過程中很容易會使用 print 的方式來追蹤並解決問題,以 C 來說最常見的就是 printf,如果要吐到 console 上的話就開啟 /dev/console 並使用 fprintf。 今天聽到的問題是:「版子的 console 壞掉了怎麼辦?」
最不花腦筋的答案:「換張版子吧~」
廢話,如果是這樣也不用紀錄了。我今天看到的作法紀錄在下面:
$ killall klogd
$ mv /dev/console /dev/console_bak
$ ln -sf /dev/pts/0 /dev/console
這作法真是太 cool 了,連程式都不用改唷,當然前題是你可以透過 terminal 連進去就是了。第1行的目的是少印一些資訊。
那 /dev/pts/0 是什麼東西呢?pts 是 pseudo terminal slave 的縮寫。細節可以 google 得到,這邊只講最簡單的,當有 terminal 連到 linux 主機時,主機會分派一個 pts 給他。舉例來說,我在 linux 啟動兩個 gnome-terminal,再透過 who 這個指令,可以看到下面的訊息:
$ who
neokent tty7 2016-03-03 15:05 (:0)
neokent pts/2 2016-03-03 15:06 (:0)
neokent pts/5 2016-03-03 17:08 (:0)
其中 tty7 是我的桌面,pts/2 和 pts/5 是我的兩個 terminal。這時候如果在 pts/2 的 terminal 上執行 echo Hello > /dev/pts/5 可以在 pts/5 上看到 Hello 唷。
最不花腦筋的答案:「換張版子吧~」
廢話,如果是這樣也不用紀錄了。我今天看到的作法紀錄在下面:
$ killall klogd
$ mv /dev/console /dev/console_bak
$ ln -sf /dev/pts/0 /dev/console
這作法真是太 cool 了,連程式都不用改唷,當然前題是你可以透過 terminal 連進去就是了。第1行的目的是少印一些資訊。
那 /dev/pts/0 是什麼東西呢?pts 是 pseudo terminal slave 的縮寫。細節可以 google 得到,這邊只講最簡單的,當有 terminal 連到 linux 主機時,主機會分派一個 pts 給他。舉例來說,我在 linux 啟動兩個 gnome-terminal,再透過 who 這個指令,可以看到下面的訊息:
$ who
neokent tty7 2016-03-03 15:05 (:0)
neokent pts/2 2016-03-03 15:06 (:0)
neokent pts/5 2016-03-03 17:08 (:0)
其中 tty7 是我的桌面,pts/2 和 pts/5 是我的兩個 terminal。這時候如果在 pts/2 的 terminal 上執行 echo Hello > /dev/pts/5 可以在 pts/5 上看到 Hello 唷。
留言
張貼留言