新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 進程控制開發(fā)之:實驗內(nèi)容

進程控制開發(fā)之:實驗內(nèi)容

作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://m.butianyuan.cn/article/257129.htm

7.4.2編寫守護進程

1.目的

通過編寫一個完整的守護進程,使讀者掌握守護進程編寫和調(diào)試的方法,并且進一步熟悉如何編寫多進程程序。

2.內(nèi)容

在該中,讀者首先建立起一個守護進程,然后在該守護進程中新建一個子進程,該子進程暫停10s,然后自動退出,并由守護進程收集子進程退出的消息。在這里,子進程和守護進程的退出消息都在系統(tǒng)日志文件(例如“/var/log/messages”,日志文件的全路徑名因版本的不同可能會有所不同)中輸出。子進程退出后,守護進程循環(huán)暫停,其間隔時間為10s。

3.實驗步驟

(1)畫出該實驗流程圖。

該程序流程圖如圖7.9所示。

圖7.9實驗7.4.2流程圖

(2)實驗源代碼。

具體代碼設(shè)置如下:

/*daemon_proc.c*/

#includestdio.h>

#includestdlib.h>

#includesys/types.h>

#includeunistd.h>

#includesys/wait.h>

#includesyslog.h>

intmain(void)

{

pid_tchild1,child2;

inti;

/*創(chuàng)建子進程1*/

child1=fork();

if(child1==1)

{

perror(child1fork);

exit(1);

}

elseif(child1>0)

{

exit(0);/*父進程退出*/

}

/*打開日志服務(wù)*/

openlog(daemon_proc_info,LOG_PID,LOG_DAEMON);

/*以下幾步是編寫守護進程的常規(guī)步驟*/

setsid();

chdir(/);

umask(0);

for(i=0;igetdtablesize();i++)

{

close(i);

}

/*創(chuàng)建子進程2*/

child2=fork();

if(child2==1)

{

perror(child2fork);

exit(1);

}

elseif(child2==0)

{/*進程child2*/

/*在日志中寫入字符串*/

syslog(LOG_INFO,child2willsleepfor10s);

sleep(10);

syslog(LOG_INFO,child2isgoingtoexit!);

exit(0);

}

else

{/*進程child1*/

waitpid(child2,NULL,0);

syslog(LOG_INFO,child1noticedthatchild2hasexited);

/*關(guān)閉日志服務(wù)*/

closelog();

while(1)

{

sleep(10);

}

}

}

(3)由于有些嵌入式開發(fā)板沒有syslog服務(wù),讀者可以在宿主機上編譯運行。

$gccdaemon_proc.c–odaemon_proc(或者使用Makefile)

(4)運行該程序。

(5)等待10s后,以root身份查看系統(tǒng)日志文件(例如“/var/log/messages”)。

(6)使用ps–ef|grepdaemon_proc查看該守護進程是否在運行。

4.實驗結(jié)果

(1)在系統(tǒng)日志文件中有類似如下的信息顯示:

Jul2021:15:08localhostdaemon_proc_info[4940]:child2willsleepfor10s

Jul2021:15:18localhostdaemon_proc_info[4940]:child2isgoingtoexit!

Jul2021:15:18localhostdaemon_proc_info[4939]:child1noticedthatchild2hasexited

讀者可以從時間戳里清楚地看到child2確實暫停了10s。

(2)使用命令ps–ef|grepdaemon_proc可看到如下結(jié)果:

david49391021:15?00:00:00./daemon_proc

可見,daemon_proc確實一直在運行。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 3 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉