藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18


如何保證一個程序同時只有一個實例(進程)運行?

要編程實現?
1。如何保證本程序同時只有一個實例(進程)運行?

2。如何判斷一個進程的父進程是SHELL?

如何保證一個程序同時只有一個實例(進程)運行?

getppid()

如何保證一個程序同時只有一個實例(進程)運行?

-->
第一個,你可以這樣,建立一個文件,裡面放的是
這個進程的pid,然後把文件鎖住,如果再起一個的話,
去讀此文件,因文件已被鎖,所以知道已經有一個進程在
運行。沒有特別好的方法來判斷,這是一個方法。

如何保證一個程序同時只有一個實例(進程)運行?

要編程實現?
1。如何保證本程序同時只有一個實例(進程)運行?
這個應該在程序設計的時候保證的,如果是判斷一個進程是否起來,沒必要編程序吧

2。如何判斷一個進程的父進程是SHELL?
進程如果不是守護的,getppid後便知道,如果是守護的那麼一般是init,也能夠知道

如何保證一個程序同時只有一個實例(進程)運行?

藍色鍵盤,謝謝你的答覆
>;要編程實現?
>;1。如何保證本程序同時只有一個實例(進程)運行?
>;這個應該在程序設計的時候保證的,如果是判斷一個進程是否起來,沒必要編程>;序吧
因為我寫的程序比較占資源,一次最好只起一個進程。最好能在程序內判斷。



>;2。如何判斷一個進程的父進程是SHELL?
>;進程如果不是守護的,getppid後便知道,如果是守護的那麼一般是init,也能夠>;知道

能否詳細點, getppid只能得到父進程的pid,但如何判斷父進程是shell進程?

如何保證一個程序同時只有一個實例(進程)運行?

1、如果啟動某個進城後,又另外一進程在啟動,這樣的過程實現起來比較麻煩,至少你要有一種IPC的手段。
如果只是在一個進程創建了某個進程,然後判斷是否繼續fork之類的,這個比較簡單。隨便一個計數器和一個signal函數便能實現。
2、如果進程成為了deamon,那麼其一般父進程為init。

如何保證一個程序同時只有一個實例(進程)運行?

1、用一個咨詢式文件鎖。APUE裡有。
2、不可能。也沒這個必要。樓主的需求有問題。

如何保證一個程序同時只有一個實例(進程)運行?

偶覺得很簡單,沒那麼複雜。

在程序運行的時候,判斷是否有同樣的程序在運行。

俺用GCC, 來一個popen , 測試一下PS -EF|GREP 程序|wc -l。

就OK。

如何保證一個程序同時只有一個實例(進程)運行?

沒必要用文件鎖那麼複雜,用popen 即可,這兒有個現成的函數,可以判斷同名進程已經起了幾個。
/************************************
*      函 數 名: int  CheckPoc(char * ppszProcess)
*      文 件 名: CheckProc.c
*      入口參數: ppszProcess:進程名
*
*      返回參數: 進程數
*      函數功能: 檢查進程數,並可用於殺進程使用
***************************************/
int    CheckProc(ppszProcess)
char * ppszProcess;
{
    FILE *fp;
    char buffer[300], cmd[20];
    char pid[20], temp[20],proc[20];
    int  i = 0;
    sprintf(temp,"ps -ef|grep %s",ppszProcess);

    if((fp = popen(temp, "r")) != NULL)
    {
        while (fgets(buffer, 128, fp))
        {
           sscanf(buffer, "%*s%s%*s%*s%*s%*s%*s%s", pid,proc);
           if (strstr(proc, ppszProcess)!=NULL && atoi(pid)!=getpid())
                i++;
        }
    }
    pclose(fp);
    return  (i);
}

如何保證一個程序同時只有一個實例(進程)運行?

一般兩種
1、啟動腳本中判斷進程是否存在
2、文件鎖的方式,一般是將pid寫到某個pid文件中,並對文件加鎖。

如何保證一個程序同時只有一個實例(進程)運行?

-->

從哪搞來的???

這種方法不準確,容易產生誤判。

如何保證一個程序同時只有一個實例(進程)運行?

-->
為什麼?請指教!
這個是我自己寫的。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com