在計算機裡面,乙個程序通常指的是乙個執行程式的例項,它包含程式**和其活動。依賴於具體的作業系統,乙個程序啟動後通常由若干個執行緒組成,多個執行緒可以同時併發的執行程式的指令,程序裡面第乙個啟動的執行緒,通常稱為主線程。
前台程序
通常也指互動程序,這些程序一般都是通過linux終端會話建立的,換句話說必須有使用者連線到系統上,然後開啟乙個程序,這種程序不會被系統函式或者建立。
後台程序
通常也指非互動程序,不需要連線到終端執行,也不需要使用者的輸入
守護程序是一種特殊的後台程序,通常由作業系統啟動,然後一直保持執行,作為乙個永久服務,除非系統關機,否則永遠不會死亡。守護程序在linux裡面,可以通過init程序控制。
在linux裡面,乙個新的程序通常由已經存在的程序建立,新的執行緒一般稱為子程序,建立的執行緒稱為父程序,子程序完全拷貝父程序的執行環境,僅僅程序id不一樣。
在linux裡面有兩種建立新的程序的方法:
(1)使用system函式 相對簡單,但是不高效其有一定的風險
(2)使用fork和exec函式
相對複雜,相比system函式,提供了更靈活,更快,更安全的建立方式。
因為linux是多使用者的作業系統,意味著不同的使用者可以執行不同的程式在系統上,每個執行的程式在核心裡面必須是唯一的。
這就是process id和parent process id,也稱pid和ppid:
父程序指的是在執行期間建立其他程序的程序。
子程序指的是被建立的程序
init程序是linux系統裡面所有程序的父程序,它是linux系統引導載入的時候執行的第乙個程式,它管理所有其他的程序,init程序由核心啟動,原則上它沒有父程序。此外init程序的pid總是1。
new:等待被建立的程序
ready:該程序正在等待分配給處理器
running:正在執行程式指令的程序
waitting:程序等待一些事件完成(例如io完成,或者受到signal訊號)
terminated:執行結束的程序
特殊的狀態zombie:程序已經死亡,但其仍然在程序表裡面,也稱殭屍程序。
(1)ps命令
(2)top命令
(3)htop命令
(4)glances命令
kill -l
1) sighup 2) sigint 3) sigquit 4) sigill 5) sigtrap
6) sigabrt 7) sigbus 8) sigfpe 9) sigkill 10) sigusr1
11) sigsegv 12) sigusr2 13) sigpipe 14) sigalrm 15) sigterm
16) sigstkflt 17) sigchld 18) sigcont 19) sigstop 20) sigtstp
21) sigttin 22) sigttou 23) sigurg 24) sigxcpu 25) sigxfsz
26) sigvtalrm 27) sigprof 28) sigwinch 29) sigio 30) sigpwr
31) sigsys 34) sigrtmin 35) sigrtmin+1 36) sigrtmin+2 37) sigrtmin+3
38) sigrtmin+4 39) sigrtmin+5 40) sigrtmin+6 41) sigrtmin+7 42) sigrtmin+8
43) sigrtmin+9 44) sigrtmin+10 45) sigrtmin+11 46) sigrtmin+12 47) sigrtmin+13
48) sigrtmin+14 49) sigrtmin+15 50) sigrtmax-14 51) sigrtmax-13 52) sigrtmax-12
53) sigrtmax-11 54) sigrtmax-10 55) sigrtmax-9 56) sigrtmax-8 57) sigrtmax-7
58) sigrtmax-6 59) sigrtmax-5 60) sigrtmax-4 61) sigrtmax-3 62) sigrtmax-2
63) sigrtmax-1 64) sigrtmax
一般比較熟悉的暴力停止:kill -9 pid。 這個強大和危險的命令迫使程序在執行時突然終止,程序在結束後不能自我清理。 危害導致系統資源無法正常釋放,一般不推薦使用,除非其他辦法都無效。
立即把程序無條件的殺掉
還有比較溫和的kill -15:
友好告訴程序退出,程序先儲存好資料,再正常退出。 給父程序傳送乙個 term 訊號,試圖殺死它和它的子程序。 請求徹底終止某項執行操作.它期望接收程序清除自給的狀態並退出
其他的如果是在乙個前台程序的中:
中斷命令:ctrl-c(sigint 2) 傳送sigint訊號給前台程序組中的所有程序,強制終止程式的執行;
掛起命令:ctrl—z(sigtstp 20) 前台程序的掛起
退出命令:ctrl-d (sigquit 3)乙個特殊的二進位制值,表示eof,作用相當於在終端中輸入exit後回車;
除了kill指定pid,還可以指定應用程式的名字進行kill:
如:
killall firefox
每個程序都有乙個程序控制塊,包含有關程序的所有資訊。它是一種資料結構,包含以下內容:
(1)程序的狀態
(2)程序的id或者父id
(3)cpu暫存器和程式計數器
(4)cpu排程資訊,例如乙個優先順序資訊
(5)記憶體管理資訊,例如page表和segment表
(6)賬戶資訊,例如核心cpu時間,賬戶計數等
(7)io狀態資訊,裝置分配或者開啟的檔案表等
本文主要介紹了liunx裡面關於程序相關的資訊,程序是正在執行程式的例項,也是作業系統資源分配的基本單位,執行緒是cpu排程的基本單位。此外,程序的pcb記錄了每個程序詳細的描述資訊,通過這個資料塊,我們可以詳細的了解當前程序的執行狀態。
程序基礎知識
程序基礎知識 問題1 程序和程式的區別 程序是作業系統中正在執行的任務,是執行中的程式 程式是儲存在磁碟上包含有可執行機器 和指令的檔案 問題2 程序的類別 互動程序,批處理程序 和 守護程序 互動程序 由shell 啟動的程序,在執行過程中要求與使用者進行互動 批處理程序 乙個程序序列,負責按順序...
Linux基礎知識專欄 程序通訊
一 通訊原理及基礎知識 通訊原理 服務端建立乙個命名管道,並監控管道中是否存在內容。倘若有則讀取,或者根據內容進行相應的響應 客戶端判斷是否存在命名管道。往管道中輸入資料,服務端即可接收到資料。單向通訊實現 客戶端寫入,服務端讀取 server.c 建立命名管道 開啟命名管道 注意開啟的方式 監聽命...
關於Linux的掛載等基礎知識
mount就是掛載磁碟。在linux的shell中執行。使用mount命令就能檢視到當前掛載的目錄和對應的磁碟裝置檔案。linux裡,沒有碟符這個概念,我們用目錄的形式進行管理,把每乙個分割槽和某乙個目錄對應.那麼,我們對這個目錄的操作就是對這個分割槽的操作,這樣就實現了硬體管理手段和軟體目錄管理手...