linux父子进程同步实验,Linux-父子进程的简单同步
int fork()
功能:創(chuàng)建一個子進(jìn)程
返回值:0-創(chuàng)建成功,-1-創(chuàng)建進(jìn)程失敗,>0-創(chuàng)建進(jìn)程成功,返回返回子進(jìn)程id
int wait(int * status)
功能:將調(diào)用的進(jìn)程掛起,等待子進(jìn)程運(yùn)行結(jié)束
參數(shù):指向整數(shù)的指針,0-子進(jìn)程正常結(jié)束,非0-出現(xiàn)運(yùn)行有誤
返回值:調(diào)用正常-子進(jìn)程id,調(diào)用進(jìn)程無子進(jìn)程-調(diào)用失敗,返回-1
int exit()
功能:終止進(jìn)程的執(zhí)行
返回值:無
sleep(n)
功能:進(jìn)程隨眠1秒
參數(shù):n-隨眠時間
實(shí)例代碼
1.1 父進(jìn)程創(chuàng)建子進(jìn)程,分別循環(huán)輸出"I am parent."和"I am child."5次,每次輸出一次后使用sleep(1)延時1s。
#include
#include
/*
1_1.c
父進(jìn)程創(chuàng)建子進(jìn)程,分別循環(huán)輸出
"I am child."和"I am parent."
每輸出一次隨眠1s。
*/
main()
{
int p;
while((p=fork())==-1);
if(p==0)
{/*子進(jìn)程塊*/
int i;
for(i=0;i<5;i++)
{
printf("I am child.\n");
sleep(1);
}
}
else
{/*父進(jìn)程塊*/
int i;
for(i=0;i<5;i++)
{
printf("I am parent.\n");
sleep(1);
}
}
}
1.2 在1.1的基礎(chǔ)上利用exit()和wait()實(shí)現(xiàn)父子進(jìn)程間的同步。
#include
#include
#include
/*
簡單的進(jìn)程同步:
父進(jìn)程等待子進(jìn)程輸出后再輸出
*/
main()
{
int p;
while((p=fork())==-1);
if(p==0)
{/*子進(jìn)程塊*/
int i;
for(i=0;i<5;i++)
{
printf("I am child.\n");
sleep(1);
}
exit(0);
}
else
{/*父進(jìn)程塊*/
int i;
for(i=0;i<5;i++)
{
wait(0);
printf("I am parent.\n");
sleep(1);
}
}
}
擴(kuò)展鏈接
[apue] 使用文件記錄鎖無法實(shí)現(xiàn)父子進(jìn)程交互執(zhí)行同步
父子進(jìn)程間交互執(zhí)行是指用一種同步原語,實(shí)現(xiàn)父進(jìn)程和子進(jìn)程在某一時刻只有一個進(jìn)程執(zhí)行,之后由另外一個進(jìn)程執(zhí)行,用一段代碼舉例如下: SYNC_INIT(); , counter=; pid_t pid ...
linux父子進(jìn)程問題
今天遇到一個linux進(jìn)程啟動時指定Max open files不對的問題,導(dǎo)致程序建立socket異常,進(jìn)而導(dǎo)致fullgc問題,影響正常服務(wù).所以順帶又溫習(xí)了下linux下的父子進(jìn)程的特性. 孤兒 ...
Linux 父子進(jìn)程實(shí)現(xiàn)復(fù)制文件內(nèi)容到另一個文件內(nèi)
1. 子進(jìn)程先拷貝前一半 ,父進(jìn)程一直阻塞到子進(jìn)程拷貝完再拷貝后一半 /* 子進(jìn)程先拷貝前一半文件,父進(jìn)程先阻塞等待子進(jìn)程拷貝完前一半內(nèi)容, * 然后父進(jìn)程在拷貝,后一半內(nèi)容 * */ #includ ...
linux殺死進(jìn)程的簡單講解
一. 終止進(jìn)程的工具kill .killall.pkill.xkill 終止一個進(jìn)程或終止一個正在運(yùn)行的程序,一般是通過kill .killall.pkill.xkill 等進(jìn)行.比如一個程序已經(jīng)死掉 ...
[置頂] 簡單解析linux下進(jìn)程通信方法
linux下的進(jìn)程通信手段基本上是從Unix平臺上的進(jìn)程通信手段繼承而來的.而對Unix發(fā)展做出重大貢獻(xiàn)的兩大主力AT&T的貝爾實(shí)驗(yàn)室及BSD(加州大學(xué)伯克利分校的伯克利軟件發(fā)布中心)在進(jìn)程間 ...
【Linux 進(jìn)程】fork父子進(jìn)程間共享數(shù)據(jù)分析
之前我們通過fork()函數(shù),得知了父子進(jìn)程之間的存在著代碼的拷貝,且父子進(jìn)程都相互獨(dú)立執(zhí)行,那么父子進(jìn)程是否共享同一段數(shù)據(jù),即是否存在著數(shù)據(jù)共享.接下來我們就來分析分析父子進(jìn)程是否存在著數(shù)據(jù)共享. ...
【Linux 進(jìn)程】之關(guān)于父子進(jìn)程之間的數(shù)據(jù)共享分析
之前我們通過fork()函數(shù),得知了父子進(jìn)程之間的存在著代碼的拷貝,且父子進(jìn)程都相互獨(dú)立執(zhí)行,那么父子進(jìn)程是否共享同一段數(shù)據(jù),即是否存在著數(shù)據(jù)共享.接下來我們就來分析分析父子進(jìn)程是否存在著數(shù)據(jù)共享. ...
linux進(jìn)程通信之使用匿名管道進(jìn)行父子進(jìn)程通信
管道:是指用于連接一個讀進(jìn)程和一個寫進(jìn)程,以實(shí)現(xiàn)它們之間通信的共享文件,又稱pipe文件. 管道是單向的.先進(jìn)先出的.無結(jié)構(gòu)的.固定大小的字節(jié)流,它把一個進(jìn)程的標(biāo)準(zhǔn)輸出和另一個進(jìn)程的標(biāo)準(zhǔn)輸入連接在一起 ...
LINUX編程學(xué)習(xí)筆記(十四) 創(chuàng)建進(jìn)程與 父子進(jìn)程內(nèi)存空間
1什么是進(jìn)程:進(jìn)程是一個執(zhí)行中的程序 執(zhí)行的程序: 代碼->資源->CPU 進(jìn)程有很多數(shù)據(jù)維護(hù):進(jìn)程狀態(tài)/進(jìn)程屬性 所有進(jìn)程屬性采用的一個樹形結(jié)構(gòu)體維護(hù) ps ?-a//所有進(jìn)程 ps - ...
隨機(jī)推薦
MyIsam和InnoDB的區(qū)別
個人見解: 1.最主要的差別就是Innodb 支持事務(wù)處理與外鍵和行級鎖.而MyISAM不支持 所以有用到事務(wù)處理和外鍵的,要用Innodb 2.?InnoDB 中不保存表的具體行數(shù),也就是說,執(zhí)行s ...
while do while 區(qū)別
一.while語句的一般形式為:while(表達(dá)式)語句其中表達(dá)式是循環(huán)條件,語句為循環(huán)體.while語句的語義是:計算表達(dá)式的值,當(dāng)值為真(非0)時, 執(zhí)行循環(huán)體語句. int i=10; whil ...
Git add 常見用法
Git add ? git add [參數(shù)] ?[--] //作用就是將我們需要提交的代碼從工作區(qū)添加到暫存區(qū),就是告訴git系統(tǒng),我們要提交哪些文件,之后就可以使用gi ...
Awk by Example--轉(zhuǎn)載
總結(jié)
以上是生活随笔為你收集整理的linux父子进程同步实验,Linux-父子进程的简单同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 虚拟机安装图形界面,linu
- 下一篇: 中柏ezpadE7装linux,中柏EZ