一)
建立程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
1. fork系統呼叫
fork呼叫建立乙個新程序。新的程序或者說子程序是呼叫程序或者說父程序的副本。fork語法是:
#include
pid_t fork(void);
如果fork執行成功,就向父程序返回子程序的pid,並向子程序返回0。這意味著你只呼叫fork一次,它也返回兩次。
fork建立的新程序是和父程序一樣的副本,包括真實和有效uid和gid、程序組和會話id、環境、資源限制、開啟的檔案以及共享記憶體段。
如下程式清單展示乙個使用fork的簡單示例程式。
/************************ child.c ***************************/
#include
#include
#include
int main(void)
else if(child==0)
else
exit(exit_success);
}執行命令編譯該程式。這個程式的輸出應該和下面類似:
$./child
in parent
in child
child pid = 14091
child ppid = 14090
parent pid = 14090
parent ppid = 1549
二)控制程序
1.等待程序--------wait函式族
一旦你用fork建立乙個子程序,為了收集新程序的退出狀態並防止出現僵程序,父程序應該等待子程序結束。
使用wait或waitpid函式可以收集子程序的退出狀態。它們的原形如下:
#include
#include
pid_t wait(int *status);
pid_t waitpid(pid_t pid,int *status,int options);
status儲存子程序的退出狀態。pid是等待程序的pid。
options規定wait呼叫的行為應該如何。它可以使wnohang,導致waitpid在沒有子程序退出程序時立即返回,也可以是wuntraced,意味著它應該因為存在沒有報告狀態的程序而返回。你也可以對它們執行邏輯「或」(or)操作,取得兩種行為(也就是說,給options引數傳送whohang||wuntraced)。
1.殺死程序
乙個程序由於以下5個原因中的乙個而終止。
。它的main函式呼叫了return
。它呼叫了exit
。它呼叫了_exit
。它呼叫了abort
。它被乙個訊號終止
前3個理由是正常終止,而後2和則是非法正常終止。但是無論程序為何終止,最後都執行相同的核心**、關閉開啟的檔案、釋放記憶體資源,並且執行其他要求的清理工作。
exit
函式
這個函式在中宣告的原型如下:
int exit(int status);
exit導致程式正常並且返回父程序的狀態(status)。
_exit函式在中宣告。它立即終止呼叫它的程序。
使用abort函式
如果你需要異常地終止乙個程式,可以使用abort函式。在liux下,abort還可以讓程式產生記憶體轉儲(core dump),這是大多數調式器用於分析程式崩潰時的檔案。雖然任何開啟的檔案都被關閉了,但abort函式仍然是個粗暴的呼叫,應該作為最後的手段來使用,比如你碰到類似嚴重記憶體不足這樣的錯誤,無法用程式的方法處理時再用。abort也是乙個標準庫函式,它原型為
#include
void abort(void);
下面的程式顯示了abort函式如何執行。
/*********************** abort.c ************************/
#include
#include
int main(void)
使用gcc編譯這個程式,並如下執行:
$./abort
aborted
sulimit
–c unlimited
$./abort
aborted(core dumped)
注意你的系統可能不能生成乙個core檔案。如果它沒有生成core檔案,則按照上面的示範執行來使用shell的命令ulimit。
使用kill函式
乙個程序能呼叫kill函式殺死另乙個程序,它的原型如下:
#include
#include
int kill(pid_t pid,int sig);
pid指定了要殺死的程序,而sig是要傳送的訊號,如:sigterm,sigkill。
三)其它
1.
睡眠函式
#include
int sleep(int sec);
sec指示要睡眠的時間(秒)。
event詳細解說
event代表事件的狀態,例如觸發event物件的元素 滑鼠的位置及狀態 按下的鍵等等。event物件只在事件發生的過程中才有效。event的某些屬性只對特定的事件有意義。比如,fromelement 和 toelement 屬性只對 onmouseover 和 onmouseout 事件有意義。例...
詳細解說sizeof
50公尺的 http www.50mi.net開張了,所以50公尺邀請我給他寫點什麼。說實在的,作為乙個資深的潛水員,我還真沒動筆寫過什麼東西,所以絞盡腦汁也沒想起來能寫什麼的。不過鑑於50公尺喜歡在小孩子面前臭屁的,就寫一篇群裡討論很多的sizeof問題吧。1 什麼是sizeof 首先看一下siz...
詳細解說STL string
詳細解說stl string 前言 string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花繚亂的string find 函式 1.3 string insert,replace,erase 2 string 和 c風格字串 3 string 和 charac...