iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0

前言

今天要來講程序的概念,你一開始聽到程序可能會疑惑和程式的差別,接下來就讓我們來探討程序這個傢伙吧~

程序?程式?

程式

儲存在以下媒體中(硬碟、光碟...),爲實體檔案

程序

程式被執行後,其中的權限屬性、程式碼、資料載入記憶體,這一大包東西被貼上一個 PID的標籤來識別。

關聯

子程序、父程序

  • 子程序的 ID: PID
  • 父程序的 ID: PPID

我們會以一連串的行爲來說明父子程序的關係。

一開始我打開 terminal 進入 zsh,執行ps -l看看程序執行結果:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 32147  5285  4  80   0 - 14107 sigsus pts/10   00:00:00 zsh
4 R  1000 32258 32147  0  80   0 -  9078 -      pts/10   00:00:00 ps

行爲如下圖:

圖一

接着我輸入 bash 進入 bash 這個子程序,然後再輸入ps -l 觀察

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 32147  5285  1  80   0 - 14107 sigsus pts/10   00:00:00 zsh
0 S  1000 32265 32147  8  80   0 -  8310 wait   pts/10   00:00:00 bash
4 R  1000 32595 32265  0  80   0 -  9079 -      pts/10   00:00:00 ps

圖二

最後我輸入 exit 退出目前程序

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 32147  5285  1  80   0 - 14107 sigsus pts/10   00:00:00 zsh
4 R  1000 32604 32147  0  80   0 -  9078 -      pts/10   00:00:00 ps

圖三

我們觀察之後可以發現:

  • 一個 ps 的程序在 zsh 開啓,另一個 ps 的程序在 bash 中開啓,之後退出 bash 之後開啓的 ps 都是不同的程序,所以他們的 PID 不同。
  • zsh 的父程序的 PID 是 5285,他是誰?
    • 如果透過本機登入,則爲名叫 login 的程序
    • 如果透過 ssh 連線登入,則爲名叫 sshd 的程序

上一篇
[Day 10] Linux 細部權限 ACL
下一篇
[Day 12] Intro to Tensorflow (1)
系列文
30 天不間斷-資工隨筆大雜燴30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言