Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc
實驗三進程的創建和簡單控制(學生分析
實驗 進程的創建和簡單控制
實驗目的:
掌握進程的概念和進程的狀態,對進程有感性的認識;
掌握進程創建方法;
認識進程的并發執行,了解進程族之間各種標識及其存在的關系;
熟悉進程的創建、阻塞、喚醒、撤銷等控制方法。
實驗內容:
了解有關Linux進程的屬性和進程的層次結構;
學習有關Linux的前臺后臺進程;
學習有關Linux命令的順序執行和并發執行;
學習有關掛起和終止進程;
了解并發程序的不可確定性,進行簡單并發程序設計。
實驗步驟:
Shell下的進程控制
進入Linux系統。
用ps查看進程。linux的ps命令是用來監視系統進程和資源使用情況的命令顯示瞬間的動態ps 的參數非常多常用的參數-A 列出所有的-w 顯示加寬可以顯示較多的-au 顯示較詳細的-aux 顯示所有包含其他使用者的
用kill終止進程kill命令通過向進程發送指定的信號來結束進程。
用pstree命令顯示系統中進程層次結構。pstree指令用ASCII字符顯示樹狀結構,清楚地表達間的相互關系。語法格式pstree [-acGhlnpuUV][-H ][/]
Linux簡單進程編程
理解系統調用fork()的使用。fork()會產生一個與父程序相同的子程序,唯一不同之處在其圖 5所示。
圖 5 系統調用fork()
編輯下面的實現父進程產生兩個子進程,父進程顯示字符“a”、兩個子進程,分別顯示字符“b”、“c”圖 6所示。#include
main( )
{
int p1,p2;
while ((p1=fork())==-1); /*父進程創建第一個進程,直到成功*/
if(p1==0) /*0返回給子進程 1*/
{
putchar('b');/*P1的處理過程*/
}
else ①
{ /*正數返回給父進程(子進程號)*/
while ((p2=fork())==-1); /*父進程創建第二個進程,直到成功*/
if(p2==0) /*0返回給子進程2*/
{
putchar('c');/*P2的處理過程*/
}
else
{
putchar('a');/*P2創建完成后,父進程的處理過程*/
}
}
}圖 6系統調用 fork()的使用編譯連接通過后,多次運行程序,觀察進程并發執行結果,并分析原因。
原因:當程序并發執行時,系統處于一個復雜的動態組合狀態,各程序執行的相對速度不確定,這使得這些程序多次并發執行得到的結果不同,調度、執行的順序由系統決定。
刪除語句①,觀察輸出的內容,體會fork的使用。
提示:編譯和運行該程序,分析結果出現兩種輸出的原因。
刪除語句①后:
思考的問題:
運行命令為什么是“./command”?
將源文件保存為以.c為后綴名的文件,開始進行編譯$gcc -o XXX XXX.c
編譯成功完成后,在當前路徑下,生成一個名為XXX的文件
然后執行 $./XXX
程序得以運行
. 和 .. 什么含義?
.表示當前目錄,..表示上級目錄,即父目錄
shell 提示為什么不換行?
因為在輸出語句中沒有/n換行符。
輸出字母為什么和提示交錯?
b,a,shell,c四個進程并發執行,執行先后順序由系統調度決定。所以當shell調度在c進程前時,會出現輸出字母和提示交錯的現象。
管道什么含義?
管道符,可以認為它是一根水管,連接輸入端和輸出端。
a | b
其中,| 就是管道符,將輸入端 a命令產生的數據傳給輸出端的b命令來處理
./f1|pstree|grep f1什么含義?
將./f1產生的數據傳給pstree來處理,經過pstree處理后的數據再傳給grep f1來處理
在運行f1文件的進程的樹結構中查找f1(?)
6中組合命令為什么沒有輸出?
(?)
如果想保留6中的./f1的輸出內容,該如何操作?
進行重定向操作
./f1 運行結果為什么不一樣?每種結果的產生原因。
有a,b,c三個并發進程,調度順序由系統決定
①bca
②bac
③abc
./f1|pstree|grep f1運行結果為什么不一樣?截圖中四種結果的產生原因。
由于并發進程的調度順序是由系統決定的,并且pstree顯示的是一剎那的進程,進程調度又是動態的。
四種結果:
①無結果:可能三個進程調度已經
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Linux实验三父子进程每隔3秒,实验三进程的创建和简单控制(学生分析.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 报销差旅费补付现金会计分录
- 下一篇: 军队选调名额在哪里公布