** 程式是靜態的概念,gcc ***.c –o pro磁碟中生成pro檔案,叫做程式。程序是程式的一次執行活動,通俗點意思是程式跑起來了,系統中就多了乙個程序**
** 使用指令ps - aux
可以檢視所有程序
使用ps -aux|grep ***
,可以只查詢想要的程序
**** 每個程序都有乙個非負整數表示的唯一id,
叫做pid,類似身份證。利用getpid()
可以獲取自身的程序識別符號
利用getppid()
獲取父程序的程序識別符號。
**** 程序a建立了程序b那麼a叫做父程序,b叫做子程序,父子程序是相對的概念,理解為人類中的父子關係
**** 有**段,資料段(初始化資料段和未初始化資料段),堆,棧,命令列引數和環境變數
**所需標頭檔案和函式原型
#
include
pid_t
fork
(void
);
fork函式呼叫成功(建立父子程序,pid不相同),返回兩次
返回值為0, 代表當前程序是子程序
返回值非負數,代表當前程序為父程序
呼叫失敗,返回-1
下面例子證明,執行結果這裡就不展示了(標頭檔案自己加)
int
main()
else
if(retpid ==0)
return0;
}
fork函式:
1、fork()是建立程序函式。
2、c程式一開始,就會產生 乙個程序,當這個程序執行到fork()的時候,會建立乙個子程序。
3、此時父程序和子程序是共存的,它們倆會一起向下執行c程式的**。
4、需要注意!!!子程序建立成功後,fork是返回兩個值,乙個代表父程序,乙個代表子程序:代表父程序的值是一串數字,這串數字是子程序的id;乙個代表子程序,值為0。
1.vfork直接使用父程序的儲存空間,不拷貝
2.vfork保證子程序先執行,當子程序呼叫exit()
退出後父程序才執行。
1.子程序退出狀態不被收集,則會變成z+(殭屍程序)
2.呼叫wait函式,收集子程序退出狀態
#
include
#include
pid_t
wait
(int
*status)
;
wait
(&status)
;printf
("child quit,child status = %d \n"
,wexitstatus
(status)
);
該printf輸出的值為子程序中exit()的引數。
在呼叫wait()
等待子程序的時間裡,父程序處於阻塞狀態,當呼叫waitpid()
等待子程序的退出狀態時,父程序不阻塞
父程序如果不等待子程序退出,在子程序之前就結束了自己的「生命」,此時子程序叫做孤兒程序。
linux避免系統存在過多孤兒程序,initinit程序id號為1,詳細介紹程序收留孤兒程序,變成孤兒程序的父程序。
exec族函式函式的作用:
我們用fork函式建立新程序後,經常會在新程序中呼叫exec函式去執行另外乙個程式。當程序呼叫exec函式時,該程序被完全替換為新程式。因為呼叫exec函式並不建立新程序,所以前後程序的id並沒有改變。
返回值:
exec函式族的函式執行成功後不會返回,呼叫失敗時,會設定errno並返回-1,然後從原程式的呼叫點接著往下執行。
execl
("./echoarg"
,"echoarg"
,"aaa"
,null
);
#
include
#include
intmain
(int argc,
char
*ar**)
printf
("after execl\n");
return0;
}
execlp可以自動尋找可執行檔案的位址。
1.簡介
建立乙個管道,然後再建立乙個程序。然後執行命令
2.呼叫格式
#include
file *popen(const char *command, const char *type);
3.引數介紹
command:是乙個指向以null結束的shell命令字串的指標。這行命令將被傳到/bin/sh並使用 -c標誌,shell將執行這個命令
type:只能是唯讀或只寫中的一種,得到的返回值(標準i/o流)也具有和type相應的唯讀或只寫型別。如果type是"r",則檔案指標連線到command的標準輸出;如果type是"w",則檔案指標連線到command的標準輸入
例子:
#
include
#include
intmain
(void);
fp =
popen
("ls"
,"r");
if(fp ==
null
)fread
(buf,
10240,1
, fp)
;printf
("%s\n"
,buf)
;pclose
(fp)
;return0;
}
Linux程序管理的部分筆記
一 程序管理 一 程序檢視與管理 1 常用的程序管理命令 ps aux 檢視程序 pstree 樹狀檢視程序狀態 top 動態檢視程序狀態 2 程序的管理 ctrl z 將前台程序調入後台並暫停 jobs 檢視後台程序 fg 將後台第 個程序在前台執行 直接將前台程序放在後台執行 kill kill...
Linux部分筆記
home 家目錄 dev 裝置掛載目錄 mnt 臨時掛載目錄 media cd 切換目錄 cd 退出 返回上一級目錄 ls 列出當前目錄內容 a all 所有檔案 包括隱藏檔案 l d r x r x r x 1 代表檔案的型別 d目錄 l 鏈結檔案 普通檔案 2 3 4 檔案的許可權 rwx re...
linux部分命令筆記
1.su 使用者名稱 切換使用者 如 su root 切換到超級使用者 adduser 使用者名稱 新增使用者 adduser yy 新增使用者 yy passwd yy 為yy使用者新增口令 ls l 檢視詳細內容 root localhost 超級使用者 當前使用者的工作目錄 yy localh...