linux顯示網(wǎng)絡(luò)會(huì)話方向?
在Linux/Unix中,有幾個(gè)概念:
過程組:一個(gè)或多個(gè)過程的集合,每個(gè)過程組都有一個(gè)唯一的過程組ID,即過程負(fù)責(zé)人的ID。
會(huì)話:一個(gè)或多個(gè)過程組的集合,具有唯一的會(huì)話領(lǐng)導(dǎo)者。會(huì)話ID是第一個(gè)進(jìn)程的ID。
一個(gè)會(huì)話可以有一個(gè)單獨(dú)的控制終端。與控制終端連接的第一個(gè)會(huì)話進(jìn)程稱為控制進(jìn)程。當(dāng)前與終端交互的進(jìn)程稱為前臺(tái)進(jìn)程組。其余的進(jìn)程組稱為后臺(tái)進(jìn)程組。
根據(jù)POSIX.1的定義:
SIGHUP信號(hào)的默認(rèn)動(dòng)作是終止程序。
當(dāng)終端接口檢測(cè)到網(wǎng)絡(luò)連接斷開時(shí),它向控制進(jìn)程(會(huì)話頭進(jìn)程)發(fā)送掛斷信號(hào)。
如果會(huì)話頭進(jìn)程終止,信號(hào)被發(fā)送到會(huì)話前臺(tái)進(jìn)程組。
當(dāng)進(jìn)程退出并生成孤立進(jìn)程組時(shí),如果任何孤立進(jìn)程組進(jìn)程處于停止?fàn)顟B(tài),則向該進(jìn)程組中的所有進(jìn)程發(fā)送SIGHUP和SIGCONT信號(hào)。
因此,當(dāng)網(wǎng)絡(luò)斷開或終端窗口關(guān)閉時(shí),控制進(jìn)程接收SIGHUP信號(hào)退出,這將導(dǎo)致其他進(jìn)程在會(huì)話期間退出。
讓讓我們看一個(gè)例子。打開兩個(gè)SSH終端窗口,并在其中一個(gè)窗口中運(yùn)行top命令。
[root]#top
在另一個(gè)終端窗口中,找到top的進(jìn)程ID為5180,其父進(jìn)程ID為5128,即登錄sh:03pts/000:00:02top
root58573672001:12pts/200:00:00greptop
使用pstree命令可以更清楚地看到這種關(guān)系:
[root]#ptree-H5180|greptop
|-sshd--sshd-bash-top
使用ps-xj命令,我們可以看到登錄shell(PID5128)和top在同一個(gè)會(huì)話中,shell是會(huì)話的第一個(gè)進(jìn)程,進(jìn)程組PGID是5128,top的進(jìn)程組PGID是5180,是前臺(tái)進(jìn)程組。
[root]#ps-xj|grep5128
5126512851285128分/0
如果可以忽略SIGHUP信號(hào),關(guān)閉窗口應(yīng)該不會(huì)影響程序的運(yùn)行。Nohup命令可以實(shí)現(xiàn)這個(gè)目標(biāo)。如果程序的標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤是終端,默認(rèn)情況下nohup會(huì)將其重定向到nohup.out文件。值得注意的是,nohup命令只是讓程序忽略SIGHUP信號(hào),需要用tagamp在后臺(tái)運(yùn)行。
nohupltcommandgt[參數(shù)…]amp
雖然nohup很容易使用,但它仍然是"原油和天然氣。它可以處理簡單的命令,但對(duì)于需要人機(jī)交互的復(fù)雜任務(wù)就比較麻煩。
其實(shí)我們可以用一個(gè)更強(qiáng)大的實(shí)用工具,screen。流行的Linux發(fā)行版(如RedHatEnterpriseLinux4)通常都帶有screen實(shí)用程序。如果沒有,可以從GNUscreen官網(wǎng)下載。
[~]#rpm-qa|grep屏幕
xscreensaver-4.18-5.rhel4.11
屏幕-4.0.2-5
開始使用屏幕
簡單來說,Screen就是一個(gè)窗口管理器,可以在多個(gè)進(jìn)程之間復(fù)用一個(gè)物理終端。屏幕中有一個(gè)會(huì)話的概念。用戶可以在一個(gè)屏幕會(huì)話中創(chuàng)建多個(gè)屏幕窗口,每個(gè)屏幕窗口就像操作一個(gè)真實(shí)的telnet/SSH連接窗口一樣。在screen中創(chuàng)建新窗口有幾種方法:
1.直接在命令行中鍵入screen命令。
[~]#屏幕
Screen將創(chuàng)建一個(gè)執(zhí)行shell的全屏窗口。您可以執(zhí)行任何shell程序,就像在ssh窗口中一樣。在此窗口中鍵入exit退出此窗口。如果這是該屏幕會(huì)話的唯一窗口,屏幕會(huì)話將退出,否則屏幕將自動(dòng)切換到前一個(gè)窗口。
2.2號(hào)。屏幕命令后面是您要執(zhí)行的程序。
[~]#屏幕vi測(cè)試.c
屏幕創(chuàng)建執(zhí)行Vitest.c的單窗口會(huì)話。退出vi將退出窗口/會(huì)話。
3.以上兩種方法都創(chuàng)建了一個(gè)新的屏幕會(huì)話。我們還可以在現(xiàn)有的屏幕會(huì)話中創(chuàng)建新窗口。在當(dāng)前的screen窗口中鍵入C-ac,即Ctrl鍵A,然后按C,screen將在這個(gè)會(huì)話中生成一個(gè)新窗口并切換到這個(gè)窗口。
屏幕有更高級(jí)的功能。你不能在屏幕窗口中中斷程序的運(yùn)行。
半小時(shí)后回來,發(fā)現(xiàn)屏幕會(huì)話:[~]#scr:
(分離)
/tmp/screens/S-root中的1個(gè)插槽。
重新連接會(huì)話:
[~]#screen-r16582
看看發(fā)生了什么。太好了。一切都在這里。去做吧。
你可能已經(jīng)注意到,特殊的組合鍵C-a是用來向屏幕發(fā)送命令的。這是因?yàn)槲覀冊(cè)阪I盤上輸入的信息是直接發(fā)送到當(dāng)前的紗窗的,我們必須通過其他向紗窗管理器發(fā)送命令。默認(rèn)情況下,screen接收以C-A開頭的命令..這種命令形式稱為屏幕中的鍵綁定,C-a稱為命令字符。
開發(fā)軟件的工具有哪些?
軟件開發(fā)工具很多,但實(shí)用的只有幾個(gè)。以下是一些常用的開發(fā)工具:
IDEA可以說是目前最智能的編譯器,可以提示一些基本但致命的代碼錯(cuò)誤,尤其是對(duì)于寫Java代碼。其他衍生應(yīng)用如Webstorm、Pycharm、CLion可以更好的分別用來寫Javascript、Python、C代碼。
StudioCodevscode,原本是一個(gè)非常強(qiáng)大和流行的前端編譯器,就像Vue框架的作者尤雨溪一樣,是用來在公共場(chǎng)合寫代碼的編譯器。但作者主要從事Java開發(fā),使用IDEA開發(fā)的頻率較高。之所以用vscode,更多的是作為一個(gè)文本編輯器,支持各種編程語言的語法高亮。例如,如果你只是看一些開源代碼或編輯一些腳本,如nginx,但不要如果不想占用內(nèi)存,輕量級(jí)的vscode是最好的選擇。
3.我們開發(fā)的交換機(jī)主機(jī),經(jīng)常做一些域名映射。如何簡單快速批量切換域名就夠了。這個(gè)應(yīng)用,很多開發(fā)者可能不知道,可以在GitHub上免費(fèi)下載使用。
我有這樣一個(gè)常見的場(chǎng)景,就是登錄一個(gè)Linux服務(wù)器,在里面做一些配置和應(yīng)用部署,而且是這樣一個(gè)方便我們操作的工具。支持高亮顯示,可以清楚的看到里面的各種類型。文件有圖形界面,方便上傳文件和打開文本進(jìn)行編輯。
主要用的,就那么幾個(gè),這些用好了,可以做很多開發(fā)工作。