linux程序管理詳細解說

2021-08-22 19:57:08 字數 2705 閱讀 3815

一)

建立程序<?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...