11 程序 基礎

2021-08-20 17:20:39 字數 2360 閱讀 2783

需要特別強調的是,本文閱讀並修改自:
當你編譯完一段**生成 a.out 後,在命令列鍵入 ./a.out,這時候,就有乙個(或多個)新的程序產生了;

在此之前,a.out檔案只是乙份儲存在硬碟上的檔案,它並不是程序;一旦在終端裡鍵入./a.out,終端 shell(它也是個程序)就會把 a.out 檔案讀到記憶體,一旦把控制權交給記憶體中的這段 a.out (稱之為記憶體映像,它一硬碟上的 a.out 檔案內容有些許區別,但是基本一致),於是 a.out 便開始執行了;

執行中的 a.out 是活物,它是程序(也許並不精確,但是這並不影響後面的學習);

命令 ps -u allen u 可以幫助你檢視當前系統中屬於使用者allen(使用者id)的程序,最後那個 u 表示顯示格式,這裡表示以使用者格式顯示;

需要注意的是,ps後面的選項以短破拆號-開頭和沒有它開頭的含義是不同的;一般來說,有 -開頭的表示的是」unix options」,沒有-開頭的叫 「bsd options」,而以雙破折號 --開頭的叫 「gnu long options」。

結果:

user       pid %cpu %mem    vsz   rss tty      stat start   time command

allen 6273 0.0 0.1 6372 4068 ? ss 10:19 0:00 /lib/systemd/systemd --user

allen 6274 0.0 0.0 25212 1508 ? s 10:19 0:00 (sd-pam)

allen 6330 0.0 0.1 13368 3296 ? s 10:19 0:01 sshd: allen@pts/1

allen 6331 0.0 0.2 7332 5100 pts/1 ss 10:19 0:00 -bash

allen 6461 0.0 0.0 2200 512 pts/1 t 10:25 0:00 ./getmyid

allen 7492 0.0 0.1 13364 3272 ? s 13:38 0:00 sshd: allen@pts/2

allen 7493 0.0 0.2 7100 4620 pts/2 ss 13:38 0:00 -bash

allen 7656 0.0 0.1 5320 3116 pts/2 s+ 13:56 0:00 man ps

allen 7668 0.0 0.0 4580 796 pts/2 s+ 13:56 0:00 pager

allen 7751 0.0 0.1 7752 3120 pts/1 r+ 14:10 0:00 ps -u allen u

上述結果中,各欄位含義:

含義user

程序的屬主

pid程序的 id 號

%cpu

程序占用的 cpu 百分比

%mem

占用的記憶體百分比

vsz程序虛擬大小

rss駐留頁的數量

tty終端 id 號

stat

程序狀態(d、r、s、t、w、x、z、<、n、l、s 等)

start

程序開始執行時間

time

累積使用的cpu時間

command

使用的命令

程序狀態值的含義(從這裡也可以看出,程序它是有狀態的):含義d

不可中斷睡眠

r執行或就緒態

s休眠狀態

t停止或被追蹤

w進入記憶體交換(從核心2.6開始無效)

x死掉的程序

z殭屍程序

<

優先順序高的程序

n優先順序較低的程序

l有些頁被鎖進記憶體

s程序的領導者(在它之下有子程序)

前面的 ps 命令展示的結果,就可以看到程序的 id 號。程序的 id 號是唯一的;雖然是唯一的,但是pid可以重用,當乙個程序終止後,其他程序就可以使用它的pid了;

每個程序都有父程序(除了 1 號程序(init程序)外),因為所有程序都是由另乙個程序生出來的;

pid為0的程序為排程程序,該程序是核心的一部分;pid為1的程序為init程序,它是乙個普通的使用者程序,但是以超級使用者特權執行;pid為2的程序是頁守護程序,負責支援虛擬儲存系統的分頁操作。

linux 系統提供了兩個系統呼叫函式 getpid 和 getppid 來讓我們檢視當前程序的 id 和它的父程序 id;

1 1 程序和多執行緒

1 什麼是程序?程序,就是一次程式的執行。舉個例子,windows任務管理器中的執行在記憶體中的exe檔案理解成程序,程序是受作業系統管理的基本執行單元。2 那什麼是執行緒?3 多執行緒的優點是什麼呢?使用多執行緒技術後,可以在同一時間內執行更多不同種類的任務,最大限度地利用cpu的空閒時間來處理其...

程序基礎概念

一 程序的排程演算法 在所有排程演算法中,最簡單的是非搶占式的fcfs演算法。演算法原理 程序按照它們請求cpu的順序使用cpu.就像你買東西去排隊,誰第乙個排,誰就先被執行,在它執行的過程中,不會中斷它。當其他人也想進入記憶體被執行,就要排隊等著,如果在執行過程中出現一些事,他現在不想排隊了,下乙...

Java基礎 程序

一 用runtime類可以執行dos命令來執行乙個程序,如下就是開啟記事本 try catch ioexception e public class runtimetest catch ioexception e 二.程序類 process 三.processbuilder 此類用於建立作業系統程序...