在UNIX系統(tǒng)中,用戶(hù)通過(guò)終端登錄系統(tǒng)后得到一個(gè)Shell進(jìn)程,這個(gè)終端成為Shell進(jìn)程的控制終端(Controlling Terminal),控制終端是保存在PCB中的信息,而我們知道fork會(huì)復(fù)制PCB中的信息,因此由Shell進(jìn)程啟動(dòng)的其它進(jìn)程的控制終端也是這個(gè)終端。默認(rèn)情況下(沒(méi)有重定向),每個(gè)進(jìn)程的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都指向控制終端,進(jìn)程從標(biāo)準(zhǔn)輸入讀也就是讀用戶(hù)的鍵盤(pán)輸入,進(jìn)程往標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯(cuò)誤輸出寫(xiě)也就是輸出到顯示器上。,在控制終端輸入一些特殊的控制鍵可以給前臺(tái)進(jìn)程發(fā)信號(hào),例如Ctrl-C表示SIGINT,Ctrl-\表示SIGQUIT。
init–>fork–>exec–>getty–>用戶(hù)輸入帳號(hào)–>login–>輸入密碼–>exec–>shell
每個(gè)進(jìn)程都可以通過(guò)一個(gè)特殊的設(shè)備文件/dev/tty訪問(wèn)它的控制終端。事實(shí)上每個(gè)終端設(shè)備都對(duì)應(yīng)一個(gè)不同的設(shè)備文件,/dev/tty提供了一個(gè)通用的接口,一個(gè)進(jìn)程要訪問(wèn)它的控制終端既可以通過(guò)/dev/tty也可以通過(guò)該終端設(shè)備所對(duì)應(yīng)的設(shè)備文件來(lái)訪問(wèn)。ttyname函數(shù)可以由文件描述符查出對(duì)應(yīng)的文件名,該文件描述符必須指向一個(gè)終端設(shè)備而不能是任意文件。下面我們通過(guò)實(shí)驗(yàn)看一下各種不同的終端所對(duì)應(yīng)的設(shè)備文件名。
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式