|
藍森林 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文件中,並對文件加鎖。 |
如何保證一個程序同時只有一個實例(進程)運行?
-->
從哪搞來的???
這種方法不準確,容易產生誤判。 |
如何保證一個程序同時只有一個實例(進程)運行?
-->
為什麼?請指教!
這個是我自己寫的。 |
| |