在 Linux 當中, Linux 是如何分辨一個程序的呢?[@more@]
什麼是程序 (process)
在 Linux 當中, Linux 是如何分辨一個程序的呢?嗯!當我們的系統裡面有太多的死亡的程序的時候, 應該怎樣將該程序查出來之後並殺掉他呢?如果主機僅允許一次登入一個終端機畫面, 如何從事多個工作的進行呢?還有,如何設定一個程序,讓他的執行順序可以比較快速呢?! 這個都是程序控制的重點項目呦!呵呵!另外一個又更常發生啦!如果我的 X-Window 死掉了!但是我的 Linux 基本上卻還是活著的時候,那麼是否需要重新 reboot 呢?還是有其他的方式可以重新啟動 X-Window ? 仔細瞧一瞧整個 process 的概念喔! |
1. 什麼是程序 (Process):
1.1 程序與執行檔 (process & program)
1.2 Linux 的多人多工環境2. 工作管理 (job control): &, [ctrl]-z, jobs, fg, bg, kill
3. 程序管理
3.1 程序的觀察: ps, top, pstree
3.2 程序的刪除: kill, killall
3.3 系統資源的觀察: free, uname, uptime, netstat, dmesg, sar4. 關於程序的執行順序: nice, renice
5. 特殊檔案與程序:
5.1 SUID/SGID/SBIT 的概念
5.2 /proc/* 代表的意義
5.3 查詢已開啟檔案或已執行程序開啟之檔案: fuser, lsof, pidof6. 本章習題練習
7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23890
1.1 程序與執行檔 (process & program)
1.2 Linux 的多人多工環境2. 工作管理 (job control): &, [ctrl]-z, jobs, fg, bg, kill
3. 程序管理
3.1 程序的觀察: ps, top, pstree
3.2 程序的刪除: kill, killall
3.3 系統資源的觀察: free, uname, uptime, netstat, dmesg, sar4. 關於程序的執行順序: nice, renice
5. 特殊檔案與程序:
5.1 SUID/SGID/SBIT 的概念
5.2 /proc/* 代表的意義
5.3 查詢已開啟檔案或已執行程序開啟之檔案: fuser, lsof, pidof6. 本章習題練習
7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23890

由前面一連幾個章節的資料看來,我們一直強調在 Linux 底下所有的指令與您能夠進行的動作都與權限有關, 而系統如何判定你的權限呢?當然就是前面
帳號管理 章節當中提到的 UID/GID 的相關概念,以及檔案的屬性相關性囉!再進一步來解釋, 您現在大概知道,在 Linux 系統當中:『
觸發任何一個事件時, 系統都會將他定義成為一個程序,並且給予這個程序一個 ID ,稱為 PID,同時依據啟發這個程序的使用者與相關屬性關係, 給予這個 PID 一組有效的權限設定。』 從此以後,這個 PID 能夠在系統上面進行的動作,就與這個 PID 的權限有關了!
看這個定義似乎沒有什麼很奇怪的地方,不過,您得要瞭解什麼叫做『觸發事件』才行啊! 我們在什麼情況下會觸發一個事件?而同一個事件可否被觸發多次?呵呵!來瞭解瞭解先!
程序與執行檔 (process & program)
<%}%>
看這個定義似乎沒有什麼很奇怪的地方,不過,您得要瞭解什麼叫做『觸發事件』才行啊! 我們在什麼情況下會觸發一個事件?而同一個事件可否被觸發多次?呵呵!來瞭解瞭解先!

我們如何產生一個 Process ID (PID) 呢?其實很簡單啦,就是『執行一個程式或指令』 就可以觸發一個事件了而取得一個 PID 囉!我們說過,系統應該是僅認識 binary file 的, 那麼當我們要讓系統工作的時候,當然就是需要啟動一個 binary file 囉, 那個 binary file 就是程式 (program) 啦!
那我們知道,每個程式都有三組人馬的權限,每組人馬都具有 r/w/x 的權限, 所以:『不同的使用者身份執行這個 program 時,系統給予的權限也都不相同!』 舉例來說,我們可以利用 touch 來建立一個空的檔案,當 root 執行這個 touch 指令時,他取得的是 UID/GID = 0/0 的權限,而當 dmtsai (UID/GID=501/501) 執行這個 touch 時,他的權限就跟 root 不同啦!
再舉個更常見的例子,我們要操作系統的時候,通常是利用連線程式或者直接在主機前面登入, 然後取得我們的 shell 對吧!那麼,我們的 shell 是 bash 對吧,這個 bash 在 /bin/bash 對吧, 那麼同時間的每個人登入都是執行 /bin/bash 對吧!不過,每個人取得的權限就是不同! 也就是說,我們可以這樣看:
圖一、程式與程序之間的差異
也就是說,當我們登入並執行 bash 時,系統已經給我們一個 PID 了, 這個 PID 就是依據登入者的 UID/GID (/etc/passwd) 來的啦~ 以上面的圖來做說明的話,我們知道 /bin/bash 是一個程式 (program),當 dmtsai 登入後,他取得一個 PID 號碼為 2234 的程序,這個程序的 User/Group 都是 dmtsai, 而當這個程式進行其他作業時,例如上面提到的 touch 這個指令時, 那麼由這個程序衍生出來的其他程序在一般狀態下,也會沿用這個程序的相關權限的!
子程序與父程序:
那我們知道,每個程式都有三組人馬的權限,每組人馬都具有 r/w/x 的權限, 所以:『不同的使用者身份執行這個 program 時,系統給予的權限也都不相同!』 舉例來說,我們可以利用 touch 來建立一個空的檔案,當 root 執行這個 touch 指令時,他取得的是 UID/GID = 0/0 的權限,而當 dmtsai (UID/GID=501/501) 執行這個 touch 時,他的權限就跟 root 不同啦!
再舉個更常見的例子,我們要操作系統的時候,通常是利用連線程式或者直接在主機前面登入, 然後取得我們的 shell 對吧!那麼,我們的 shell 是 bash 對吧,這個 bash 在 /bin/bash 對吧, 那麼同時間的每個人登入都是執行 /bin/bash 對吧!不過,每個人取得的權限就是不同! 也就是說,我們可以這樣看:

圖一、程式與程序之間的差異
也就是說,當我們登入並執行 bash 時,系統已經給我們一個 PID 了, 這個 PID 就是依據登入者的 UID/GID (/etc/passwd) 來的啦~ 以上面的圖來做說明的話,我們知道 /bin/bash 是一個程式 (program),當 dmtsai 登入後,他取得一個 PID 號碼為 2234 的程序,這個程序的 User/Group 都是 dmtsai, 而當這個程式進行其他作業時,例如上面提到的 touch 這個指令時, 那麼由這個程序衍生出來的其他程序在一般狀態下,也會沿用這個程序的相關權限的!
子程序與父程序:
在上面的說明裡面,我們有提到所謂的『衍生出來的程序』,那是個啥咚咚? 這樣說好了,當我們登入系統後,會取得一個 bash 的 shell ,然後,我們用這個 bash 提供的介面去執行另一個指令,例如 /usr/bin/passwd 或者是 touch 等等, 那些另外執行的指令也會被觸發成為 PID ,呵呵!那個 PID 就是『子程序』了, 而在我們的 bash 環境下,就稱為『父程序』了!
另外,是否還記得我們在 bash shell 那一篇裡面有提到 『環境變數』在不同程序之間的呼叫呢?現在稍微曉得是什麼意思了嗎? 是啦!因為我們有執行不同的 bash 嘛!既然執行兩次,自然就會取得兩個 PID, 而因為要讓兩個 PID 之間具有一些相關性,我們的 bash 就使用了環境變數囉!
重點來啦!所以說,在系統上面的各個程序可能是有相關性的喔! 也就是有所謂的父程序與子程序的關係~至於程序的相關性,我們可以使用 pstree 這支程式去查驗, 就能知道彼此之間的關係了。
另外要注意的是:所謂『擒傧惹芡酢唬
另外,是否還記得我們在 bash shell 那一篇裡面有提到 『環境變數』在不同程序之間的呼叫呢?現在稍微曉得是什麼意思了嗎? 是啦!因為我們有執行不同的 bash 嘛!既然執行兩次,自然就會取得兩個 PID, 而因為要讓兩個 PID 之間具有一些相關性,我們的 bash 就使用了環境變數囉!
例題:請在目前的 bash 環境下,再觸發一次 bash ,並以『 ps -l 』這個指令觀察程序相關的輸出資訊。 答:
有看到那個 PID 與 PPID 嗎?第一個 bash 的 PID 與第二個 bash 的 PPID 都是 21337 啊,因為第二個 bash 是來自於第一個所產生的嘛! |
重點來啦!所以說,在系統上面的各個程序可能是有相關性的喔! 也就是有所謂的父程序與子程序的關係~至於程序的相關性,我們可以使用 pstree 這支程式去查驗, 就能知道彼此之間的關係了。
另外要注意的是:所謂『擒傧惹芡酢唬
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/330796/viewspace-880711/,如需转载,请注明出处,否则将追究法律责任。
上一篇:
Linux_top详解
下一篇:
监视运行缓慢的系统

请登录后发表评论
登录
全部评论
<%=items[i].createtime%>
<%=items[i].content%>
<%if(items[i].items.items.length) { %>
<%for(var j=0;j
<%}%> <%if(items[i].items.total > 5) { %>
<%}%>
<%=items[i].items.items[j].createtime%>
<%=items[i].items.items[j].username%> 回复 <%=items[i].items.items[j].tousername%>: <%=items[i].items.items[j].content%>
还有<%=items[i].items.total-5%>条评论
) data-count=1 data-flag=true>点击查看
<%}%>
转载于:http://blog.itpub.net/330796/viewspace-880711/