真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux如何實(shí)現(xiàn)監(jiān)控程序和程序自動(dòng)重啟方法

小編給大家分享一下linux如何實(shí)現(xiàn)監(jiān)控程序和程序自動(dòng)重啟方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上1000+服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

使用腳本實(shí)現(xiàn)自動(dòng)重啟

首先想到的最簡(jiǎn)單的使用shell腳本,大概思路:

ps -ef | grep “$1″ | grep -v “grep” | wc –l 是獲取 $1 ($1 代表進(jìn)程的名字)的進(jìn)程數(shù),腳本根據(jù)進(jìn)程數(shù)來(lái)決定下一步的操作。通過(guò)一個(gè)死循環(huán),每隔 1 秒檢查一次系統(tǒng)中的指定程序的進(jìn)程數(shù),這里也可使用crontab來(lái)實(shí)現(xiàn)。

這種方法比較土,還是可以基本解決問(wèn)題,但是有1s的延遲,筆者在應(yīng)用中未采用這種方法,有關(guān)這個(gè)shell腳本,請(qǐng)參看文章后面的附件代碼。

exec+fork方式

筆者最終采用的exec+fork方式來(lái)實(shí)現(xiàn)的,具體思想如下:

1,exec函數(shù)把當(dāng)前進(jìn)程替換為一個(gè)新的進(jìn)程,新進(jìn)程由path或file參數(shù)指定。可以使用exec函數(shù)將程序的執(zhí)行從一個(gè)程序切換到另一個(gè)程序;

2,fork函數(shù)是創(chuàng)建一個(gè)新的進(jìn)程,在進(jìn)程表中創(chuàng)建一個(gè)新的表項(xiàng),而創(chuàng)建者(即父進(jìn)程)按原來(lái)的流程繼續(xù)執(zhí)行,子進(jìn)程執(zhí)行自己的控制流程;

3,wait 當(dāng)fork啟動(dòng)一個(gè)子進(jìn)程時(shí),子進(jìn)程就有了它自己的生命周期并將獨(dú)立運(yùn)行,我們可以在父進(jìn)程中調(diào)用wait函數(shù)讓父進(jìn)程等待子進(jìn)程的結(jié)束;

相信介紹到這里,讀者已經(jīng)能夠想到解決方法了:1)首先使用fork系統(tǒng)調(diào)用,創(chuàng)建子進(jìn)程,2)在子進(jìn)程中使用exec函數(shù),執(zhí)行需要自動(dòng)重啟的程序,3) 在父進(jìn)程中執(zhí)行wait等待子進(jìn)程的結(jié)束,然后重新創(chuàng)建一個(gè)新的子進(jìn)程。

使用方法:

#./portmap 需要監(jiān)控的程序的路徑#args portmap 需要的參數(shù)$ ./supervisor ./portmap  args.....

代碼如下:

/**
 *
 * supervisor 
 *
 * author: liyangguang (liyangguang@software.ict.ac.cn)
 *
 * date: 2011-01-21 21:04:01
 *
 * changes
 * 1, execl to execv
 */ #include #include #include #include #include #include #include  intmain(int argc, char **argv){int ret, i, status;char *child_argv[100] = {0};pid_t pid;if (argc < 2) { 
        fprintf(stderr, "Usage:%s  \n", argv[0]);return -1;}for (i = 1; i < argc; ++i) {child_argv[i-1] = (char *)malloc(strlen(argv[i])+1);strncpy(child_argv[i-1], argv[i], strlen(argv[i]));child_argv[i-1][strlen(argv[i])] = '\0';}while(1){ 
        pid = fork(); if (pid == -1) {fprintf(stderr, "fork() error.errno:%d error:%s\n", errno, strerror(errno));break;}if (pid == 0) {ret = execv(child_argv[0], (char **)child_argv);//ret = execl(child_argv[0], "portmap", NULL, 0);if (ret < 0) {fprintf(stderr, "execv ret:%d errno:%d error:%s\n", ret, errno, strerror(errno));continue;}exit(0);} if (pid > 0) {pid = wait(&status); 
            fprintf(stdout, "wait return");} } 
 return 0;}

子進(jìn)程的結(jié)束狀態(tài)返回后存于status,底下有幾個(gè)宏可判別結(jié)束情況  
WIFEXITED(status)如果子進(jìn)程正常結(jié)束則為非0值。  
WEXITSTATUS(status)取得子進(jìn)程exit()返回的結(jié)束代碼,一般會(huì)先用WIFEXITED 來(lái)判斷是否正常結(jié)束才能使用此宏。  
WIFSIGNALED(status)如果子進(jìn)程是因?yàn)樾盘?hào)而結(jié)束則此宏值為真 

WTERMSIG(status)取得子進(jìn)程因信號(hào)而中止的信號(hào)代碼,一般會(huì)先用WIFSIGNALED 來(lái)判斷后才使用此宏。  
WIFSTOPPED(status)如果子進(jìn)程處于暫停執(zhí)行情況則此宏值為真。一般只有使用WUNTRACED 時(shí)才會(huì)有此情況。  
WSTOPSIG(status)取得引發(fā)子進(jìn)程暫停的信號(hào)代碼,一般會(huì)先用WIFSTOPPED 來(lái)判斷后才使用此宏。

wait函數(shù)返回值總結(jié)

shell腳本方式的代碼如下:

# 函數(shù): CheckProcess# 功能: 檢查一個(gè)進(jìn)程是否存在# 參數(shù): $1 --- 要檢查的進(jìn)程名稱# 返回: 如果存在返回0, 否則返回1.#------------------------------------------------------------------------------CheckProcess(){
  # 檢查輸入的參數(shù)是否有效
  if [ "$1" = "" ];  thenreturn 1
  fi   #$PROCESS_NUM獲取指定進(jìn)程名的數(shù)目,為1返回0,表示正常,不為1返回1,表示有錯(cuò)誤,需要重新啟動(dòng)
  PROCESS_NUM=`ps -ef | grep "$1" | grep -v "grep" | wc -l` 
  if [ $PROCESS_NUM -eq 1 ];  thenreturn 0
  elsereturn 1
  fi} 
 # 檢查test實(shí)例是否已經(jīng)存在while [ 1 ] ; do
 CheckProcess "test"
 CheckQQ_RET=$?
 if [ $CheckQQ_RET -eq 1 ]; then # 殺死所有test進(jìn)程,可換任意你需要執(zhí)行的操作 
   killall -9 test
  exec ./test &  
 fi
 sleep 1done

以上是“l(fā)inux如何實(shí)現(xiàn)監(jiān)控程序和程序自動(dòng)重啟方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


名稱欄目:linux如何實(shí)現(xiàn)監(jiān)控程序和程序自動(dòng)重啟方法
本文URL:http://weahome.cn/article/pedeii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部