ITPub博客

首页 > 数字化转型 > ERP > 程序與資源管理(转自鸟哥私房菜)

程序與資源管理(转自鸟哥私房菜)

原创 ERP 作者:mfm088 时间:2006-11-30 09:49:18 0 删除 编辑
在 Linux 當中, Linux 是如何分辨一個程序的呢?[@more@]
程序與資源管理
在 Linux 當中, Linux 是如何分辨一個程序的呢?嗯!當我們的系統裡面有太多的死亡的程序的時候, 應該怎樣將該程序查出來之後並殺掉他呢?如果主機僅允許一次登入一個終端機畫面, 如何從事多個工作的進行呢?還有,如何設定一個程序,讓他的執行順序可以比較快速呢?! 這個都是程序控制的重點項目呦!呵呵!另外一個又更常發生啦!如果我的 X-Window 死掉了!但是我的 Linux 基本上卻還是活著的時候,那麼是否需要重新 reboot 呢?還是有其他的方式可以重新啟動 X-Window ? 仔細瞧一瞧整個 process 的概念喔!


大標題的圖示什麼是程序 (process)
由前面一連幾個章節的資料看來,我們一直強調在 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 這個指令時, 那麼由這個程序衍生出來的其他程序在一般狀態下,也會沿用這個程序的相關權限的!


  • 子程序與父程序:
    在上面的說明裡面,我們有提到所謂的『衍生出來的程序』,那是個啥咚咚? 這樣說好了,當我們登入系統後,會取得一個 bash 的 shell ,然後,我們用這個 bash 提供的介面去執行另一個指令,例如 /usr/bin/passwd 或者是 touch 等等, 那些另外執行的指令也會被觸發成為 PID ,呵呵!那個 PID 就是『子程序』了, 而在我們的 bash 環境下,就稱為『父程序』了!

    另外,是否還記得我們在 bash shell 那一篇裡面有提到 『環境變數』在不同程序之間的呼叫呢?現在稍微曉得是什麼意思了嗎? 是啦!因為我們有執行不同的 bash 嘛!既然執行兩次,自然就會取得兩個 PID, 而因為要讓兩個 PID 之間具有一些相關性,我們的 bash 就使用了環境變數囉!

    例題:請在目前的 bash 環境下,再觸發一次 bash ,並以『 ps -l 』這個指令觀察程序相關的輸出資訊。
    答:
      直接執行 bash ,會進入到子程序的環境中,然後輸入 ps -l 後,出現:
      F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
      0 S   500 21337 21336  0  75   0 -  1348 wait   pts/1    00:00:00 bash
      0 S   500 22573 21337  2  75   0 -  1348 wait   pts/1    00:00:00 bash
      0 R   500 22591 22573  0  76   0 -  1302 -      pts/1    00:00:00 ps有看到那個 PID 與 PPID 嗎?第一個 bash 的 PID 與第二個 bash 的 PPID 都是 21337 啊,因為第二個 bash 是來自於第一個所產生的嘛! 

      重點來啦!所以說,在系統上面的各個程序可能是有相關性的喔! 也就是有所謂的父程序與子程序的關係~至於程序的相關性,我們可以使用 pstree 這支程式去查驗, 就能知道彼此之間的關係了。

      另外要注意的是:所謂『擒傧惹芡酢唬

      来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/330796/viewspace-880711/,如需转载,请注明出处,否则将追究法律责任。

    • 上一篇: Linux_top详解
      请登录后发表评论 登录
      全部评论

      注册时间:2012-01-14

      • 博文量
        98
      • 访问量
        1025048