LINUX系統程序相關的API

2021-10-20 14:39:24 字數 2369 閱讀 3777

在linux系統下可以用ps指令來檢視系統的程序

在實際工作中經常使用 ps -aux|gep 程式名,就可以檢視目標程式的程序。也可以用top指令檢視,相當於windows系統下的任務管理器。

每個程序都有自己的程序**,用getpid函式可以獲取當前經常的程序號

#include

#include

#include

intmain()

pid_t fork(void);

fork函式呼叫成功,返回兩次。返回值為0代表當前程序是子程序。返回值為1代表當前程序是父程序。

呼叫失敗返回-1。

使用fotk函式相當於建立了乙個子程序,原先的程序是父程序。父子程序會同時執行fork包含的內容,且父子程序不相互干擾。

fork建立乙個子程序的一般目的:

1 乙個父程序希望複製自己,使父,子程序同時執行不同的**段。這在網路服務程序中常見的——父程序等待客戶端的服務請求。當這種請求到達時,父程序呼叫fork,使子程序處理次請求。父程序則繼續等待下乙個服務請求到達。

2 乙個程序要執行乙個不同的程式。這對shell是常見的情況。在這種情況下,子程序從fork返回後立即呼叫exec。

vfork函式,也可以建立程序。它與fork函式的區別

1 vfork 直接使用父程序儲存空間,不拷貝。

2 vfork保證子程序先執行,當子程序呼叫exit退出後,父程序才執行。

正常退出

1 main函式呼叫return

2 程序呼叫exit(),標準c庫

3 程序呼叫_exit()或者_exit(),屬於系統呼叫

異常退出

1 呼叫abort

2 當程序收到某些訊號時,如ctrl+c

3最後乙個執行緒對取消(cancellation)請求做出響應

pid_t wait(int *status);父程序等待子程序

wait函式是用來父程序等待子程序退出並收集程序的退出狀態。如果子程序退出狀態不被收集,變成死程序(殭屍程序)。

可以根據函式的收集狀態來判斷子程序的執行狀態。

status引數:是乙個整形指標

非空:子程序退出狀態放在它所指向的位址中。

空:不關心退出狀態

#include

#include

#include

#include

intmain()

}else

if(pid==0)

}}return0;

}

wait函式如果其所有子程序都還在執行,則阻塞。如果乙個子程序已終止,正等待父程序獲取其終止狀態,則去得該子程序的終止狀態立即返回。如果它沒有任何子程序,則立即出錯。

pid_t waitpid(pid_t pid,int *status,int options)

從本質上講,系統呼叫waitpid和wait的作用是完全相同的,但waitpid多出了兩個可由使用者控制的引數pid和options,從而為我們程式設計提供了另一種更靈活的方式。下面我們就來詳細介紹一下這兩個引數:

pid從引數的名字pid和型別pid_t中就可以看出,這裡需要的是乙個程序id。但當pid取不同的值時,在這裡有不同的意義。

1 pid>0時,只等待程序id等於pid的子程序,不管其它已經有多少子程序執行結束退出了,只要指定的子程序還沒有結束,waitpid就會一直等下去。

2 pid=-1時,等待任何乙個子程序退出,沒有任何限制,此時waitpid和wait的作用一模一樣。

3 pid=0時,等待同乙個程序組中的任何子程序,如果子程序已經加入了別的程序組,waitpid不會對它做任何理睬。

4 pid<-1時,等待乙個指定程序組中的任何子程序,這個程序組的id等於pid的絕對值。

wait函式的詳細用法

exec函式是可以用來在乙個程式中呼叫另乙個程式

exec族函式的用法

exec族函式可以與fork函式配合使用主要作用有

1 乙個父程序希望複製自己,使父,子程序同時執行不同的**段。這在網路服務程序中是常見的——父程序等待客戶端的服務請求。當這種請求到達時,父程序呼叫fork,使子程序處理此請求。父程序則繼續等待下乙個服務請求到達。

2 乙個程序要執行乙個不同的程式。這對shell是常見的情況。在這種情況下,子程序從fork返回後立即呼叫exec。

實現功能,當父程序檢測到輸入為1的時候,建立子程序把配置檔案的字段值修改掉。

system函式

他與exec的功能相似,都是用來在程式中執行另乙個程式。它比exec更簡單更粗暴。

popen函式

它比system在應用中的好處是可以獲取執行的輸出結果。

此函式執行的結果被存放起來,可以通過fread函式來讀出來。換句話說此函式的執行資訊能夠傳遞。

程序相關API

1 每個程序都有一張私有的控制代碼表,系統有一張全域性控制代碼表 2 程序id在所有程序都有意義 演示 3 此 開啟乙個軟體,並列印程序id和控制代碼 include stdafx.h include windows.h 開啟子程序函式 bool createprocess ptchar route...

程序相關API

示例 include include include intmain else if pid 0 return0 include include include intmain else if pid 0 printf d n data return0 執行結果 return fork 57080 ...

Linux系統 程序相關的概念

1.程式和程序 程式 是編譯好的二進位制檔案,存放在磁碟上,占用的是磁碟空間,是乙個靜態的概念。程序 乙個啟動的程式,程序占用的是系統資源,如 物理記憶體,cpu,終端等,是乙個動態的概念。程式 劇本 程序 戲 舞台,演員,燈光,道具.同乙個劇本可在多個舞台上演出,所以同乙個程式可以在多個終端執行,...