Linux下程序操作

2021-06-05 00:12:03 字數 2762 閱讀 7712

什麼是程式,什麼是程序呢? 通俗的講程式是乙個包含可以執行**的檔案,是乙個靜態的檔案.而程序是乙個開始執行但是還沒有結束的程式的例項.就是可執行檔案的具體實現. 乙個程式可能有許多程序,而每乙個程序又可以有許多子程序.依次迴圈下去,而產生子孫程序. 當程式被系統呼叫到記憶體以後,系統會給程式分配一定的資源(記憶體,裝置等等)然後進行一系列的複雜操作,使程式變成程序以供系統呼叫.在系統裡面只有程序沒有程式,為了區分各個不同的程序,系統給每乙個程序分配了乙個id(就象我們的身份證)以便識別. 為了充分的利用資源,系統還對程序區分了不同的狀態.將程序分為新建,執行,阻塞,就緒和完成五個狀態. 

a.程序的標誌

#include/*包含訪問程序的函式*/

#include//包含訪問使用者資訊到頭檔案

#include

#include

int main(int argc,char **argv)

return 0;

}如圖:

輸出結果如下:

b.程序的建立

#include ;

建立乙個程序的系統呼叫只要呼叫fork 函式。pid_t fork();

當乙個程序呼叫了fork 以後,系統會建立乙個子程序.這個子程序和父程序不同的地方只

有他的程序id 和父程序id,其他的都是一樣.就象符程序轉殖(clone)自己一樣.當然建立

兩個一模一樣的程序是沒有意義的.為了區分父程序和子程序,我們必須跟蹤fork 的返回

值. 當fork 掉用失敗的時候(記憶體不足或者是使用者的最大程序數已到)fork 返回-1,否則

fork 的返回值有重要的作用.對於父程序fork 返回子程序的id,而對於fork 子程序返回0.我

們就是根據這個返回值來區分父子程序的. 父程序為什麼要建立子程序呢?前面我們已經

說過了linux 是乙個多使用者作業系統,在同一時間會有許多的使用者在爭奪系統的資源.有時

程序為了早一點完成任務就建立子程序來爭奪資源. 一旦子程序被建立,父子程序一起從

fork 處繼續執行,相互競爭系統的資源.有時候我們希望子程序繼續執行,而父程序阻塞直

到子程序完成任務.這個時候我們可以呼叫wait 或者waitpid 系統呼叫.

例項:#include

#include

#include

#include

#include //錯誤資訊標頭檔案

#include

void main(void)

else if(child==0)//對於父程序fork返回子程序到id,而對於fork子程序則返回0

/*一旦子程序被建立,父子程序一起從fork 處繼續執行,相互競爭系統的資源.有時候我們希望子程序繼續執行,而父程序阻

塞直到子程序完成任務.這個時候我們可以呼叫wait 或者waitpid 系統呼叫

*///wait 系統呼叫會使父程序阻塞直到乙個子程序結束或者是父程序接受到了乙個訊號

/*如果

沒有父程序沒有子程序或者他的子程序已經結束了wait 回立即返回.成功時(因乙個子進

程結束)wait 將返回子程序的id,否則返回-1,

*/while(((child=wait(&status))==-1)&(errno==eintr));

if(child==-1)

printf("wait error:%s\n",strerror(errno));

else if(!status)

printf("child %d terminated normally return status is zero\n",

child);

else if(wifexited(status))

printf("child %d terminated normally return status is %d\n",

child,wexitstatus(status));

else if(wifsignaled(status))

printf("child %d terminated due to signal %d znot caught\n",

child,wtermsig(status));

如圖:c.守護程序的建立

怎麼把乙個程式放到後台去執行呢?我們只要在命令後面加上&符號shell 就會把我們的

程式放到後台去執行。"開發"乙個後台檢查郵件的程式.這個程式每個乙個指

定的時間回去檢查我們的郵箱,如果發現我們有郵件了,會不斷的報警。

後台程序的建立思想: 首先父程序建立乙個子程序.然後子程序殺死父程序,訊號處理所有的工作由子程序來處理.

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

#include ;

/* linux 的默任個人的郵箱位址是 /var/spool/mail/使用者的登入名 */

#define mail "/var/spool/mail/hoyt"

/* 睡眠10 秒鐘 */

#define sleep_time 10

main(void)

else if(child>;0)

while(1);

if(kill(getppid(),sigterm)==-1)

sleep(sleep_time);}}

}如圖:

Linux程序操作

檢視程序啟動時間 ps eo pid,lstart grep pid 檢視程序的執行多久 ps eo pid,etime grep pid 檢視程序中啟動了哪些執行緒 top h p pid d 0.3 檢視所有程序的pid號,該程序執行時傳入的命令列引數,分配的cpu ps eo pid,args...

linux下多程序同時操作檔案

我們都知道多程序同時操作檔案會出現問題,但是具體會出現什麼問題呢?不知道大家有沒有仔細研究過,今天我就帶大家一起來研究一下。在操作檔案之前,很有必要了解一下核心中檔案的儲存和訪問方式 這張圖摘自 apue 我覺得畫的很好,所以就沒有自己再畫了。從圖中能夠看出每個程序都有自己獨立的乙個程序表項,由檔案...

Linux下查詢程序及終止程序操作的相關命令

linux下查詢程序及終止程序操作的相關命令 摘自 使用linux作業系統,難免遇到一些軟體 卡殼 的問題,這時就需要使用linux下強大的kill命令來結束相關程序。這在linux系統下是極其容易的事情,你只需要kill 即可,這裡 代表與此軟體執行相關的程序pid號。首先,我們需要使用linux...