什麼是程序
每乙個程序在系統中都有唯一的id標示它,此id為程序標示符
程序標示符的型別 pit_t,其實是乙個無符號整形
乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式
程序和程式的區別:
程式:可執行的二進位制**檔案,這種檔案載入到記憶體中執行就得到了乙個程序
程序:同乙個程式檔案可以載入多次成為不同的程序
程序標示符和程序之間是一一對應關係,和程式檔案是多對一關係!
程序中重要的id值
(1)程序id(2)父程序id(3)有效使用者id
(4)有效組id(5)實際使用者id(6)實際組id
其中程序id和父程序id的標示符不能更改
列印當前程序id
#include
#include
int main()
else if(pid == 0)
else
return 0;
}(2)子程序沒有複製**段,而是和父程序共享**段
(3)子程序的**段是唯讀的,是可讀的,因此父子程序可以共享**段
驗證子程序對父程序的影響
#include
#include
#include
int global;
int main()
else if(pid == 0)
sleep(2);
printf("this is child ,data:%d,stack:%d,heap:%d\n",global,stack,*heap );
return 0;
}子程序對於資料段和堆疊段中的變數修改不能不能影響到父程序的程序環境
建立乙個共享空間的子程序
vfork()函式用來建立乙個公用父程序位址空間的子程序
(1)相當於建立了執行緒
(2)子程序一定比父程序先執行!
#include
#include
#include
int global;
int main()
else if(pid == 0)
//sleep(2);
printf("data:%d,stack:%d,heap:%d\n",global,stack,*heap );
printf("parent terminates\n");
return 0;
}設定程序的所有者
用 setuid(修改後的使用者id)函式
#include
#include
#include
int main(void )
printf("after changing\n");
uid=getuid();
euid=getuid();
printf("the uid is :%d\n",uid);
printf("the euid is :%d\n",euid);
return 0;
}輸出程序統計資訊
統計資源結構的指標的宣告如下
struct rusage
else if(pid == 0)
else
printf("the parent\n");
if( wait3(null,0,&rusage) == -1 )
printf("utime is %d\n",rusage.ru_utime);
printf("ru_stime is %d\n",rusage.ru_stime);
printf("ru_maxrss is %d\n",rusage.ru_maxrss);
printf("ru_ixrss is %d\n",rusage.ru_ixrss);
printf("ru_idrss is %d\n",rusage.ru_idrss);
printf("ru_isrss is %d\n",rusage.ru_isrss);
printf("ru_minflt is %d\n",rusage.ru_minflt);
printf("ru_majflt is %d\n",rusage.ru_majflt);
printf("ru_nswap is %d\n",rusage.ru_nswap);
printf("ru_inblock is %d\n",rusage.ru_inblock);
printf("ru_oublock is %d\n",rusage.ru_oublock);
printf("ru_msgsnd is %d\n",rusage.ru_msgsnd);
printf("ru_msgrcv is %d\n",rusage.ru_msgrcv);
printf("ru_nsignals is %d\n",rusage.ru_nsignals);
printf("ru_nvcsw is %d\n",rusage.ru_nvcsw);
printf("ru_nivcsw is %d\n",rusage.ru_nivcsw);
return 0;
}
Linux程序控制
linux程序控制 獲取pid include include pid t getpdi void 獲取本程序id pdi t getppid vodi 獲取父程序id,及獲取建立子程序的程序id 程序建立 include pid t fork void 建立子程序 呼叫一次返回兩次值 1.父程序中...
linux程序控制
linux程序控制 編寫命令直譯器 一 背景 之前在 計算機作業系統 這本書中已經多次接觸了程序這一概念,而程序在作業系統中具體是做什麼的呢?卻沒有實際的與程序發生過互動,因此也就沒有實際的感受。對於我來說程序僅僅停留在概念的層面上 程序是程式執行時的記憶體空間和設定或者說程序就是程式的進行時。沒有...
Linux 程序控制
1.linux程序 1.1程式和程序 程序控制塊pcb 時間片程序標識 標識號 父程序 init程序 id 為1 1.2程序的執行身份 真實使用者 id 和真實組 id 可以通過函式getuid 和 getgid 獲得 有效使用者 id 和有效組 id 通過函式geteuid 和 getegid 獲...