概念:程式的乙個執行例項。
在linux裡面有專門用來描述程序狀態的結構task_struct
,在系統核心裡面。這個通常被稱為pcb,著這個裡面包含著這個程序的所有資訊。
pid:在描述程序的結構體pcb裡面有乙個pid,這個是描述程序id的,通過這個id就可以用來區分父程序和子程序。
另外,`getpid()`函式用來獲得當前程序的id,`getppid()`用來當前程序的父程序id
使用者自定義程序fork()
:
當使用者使用fork()
時候,呼叫一次,但是返回值有兩個,子程序的返回值是0,父程序的返回值是自己成的id,即pid。
這個子程序的所有資源都是父程序的副本,但是父程序和子程序自己的資源完全私有,不共享。
即,在建立子程序的時候將父程序的pcb、資料段、堆疊資源複製乙份給子程序。
pid_t fork(void);
#include
#include
#include
int main()
if(pid == 0)
else
printf("i'm parent\n");
return
0;}
結果
可以看到這個程式將子程序和父程序的結果,但是在這裡面子程序和父程序的執行先後順序是不固定的,這個和核心的排程演算法有關。
程序的狀態:
在系統執行每乙個進層的時候並不是一次執行所有的程序,而是分片執行的。即將每乙個程序都分為很多的片,系統在排程演算法的排程下,每次都只執行乙個程序的一部分。因為cpu執行的速度非常快,所以對人的感覺是每次都在執行所有的程式。
如圖
當乙個程序進入死亡狀態之前會有一段殭屍狀態,在殭屍狀態之前會一直占用該程序的資源,只到父程序獲得該程序的退出碼。如果乙個程式裡面殭屍態的程序太多的話,就會占用太多的資源,甚至可能導致程式崩潰。
#include
#include
#include
int main()
if(pid > 0)
else
return
0;}
在程式裡面父程序睡眠,子程序實行後立即退出。在子程序退出父程序睡眠的時間裡面,那麼這個子程序就是進入殭屍狀態。
這個時候如果使用kill -9 殭屍程序號
那麼這個kill
指令是殺死不了殭屍程序的,因為在殭屍程序裡面的程序已經是乙個死程序。所以在程式裡面需要避免存在太多的殭屍程序。
檢視程序ps -l
uid:當前被執行者身份
pid:當前程序的id
ppid:當前程序的父程序id
pri:程序的優先順序,pri值越小表示越早被執行
ni:當前程序的nice值
設定nice值:
在程式啟動之前設定nice值:nice -n -5 ./test
將test程序的nice值設定為5
在程式啟動之後設定nice值:renice -5 -p pid
將pid所表示的程序的nice設定為5
Linux筆記 程序初識
有這樣一段 分別在父程序和子程序中返回fork 的返回值,以及當前程序pid和父程序pid include include include include int t pid t pid void print intmain else if pid 0 else return0 列印出來的資訊為 f...
Linux系統 程序概念初識
所有的裝置都是圍繞儲存器工作的 cpu 控制器 運算器 1.cpu不會直接從輸入裝置獲取資料進行處理,而是先把資料放到儲存器中,cpu從儲存器中獲取資料處理。2.cpu不會直接將資料交給輸出裝置進行輸出,而是先把資料報道儲存器中,控制輸出裝置從儲存器中獲取資料輸出 2.1什麼是作業系統?2.2什麼是...
初識多程序
程序 程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎 狹義定義 程序是正在執行的程式的例項 an instance of a computer program that is being executed 廣義定義 程序...