本文由
@lonelyrains
今天剛學了一點shell指令碼的程式設計知識,寫了乙個ftp指令碼,如果沒有設定目錄則設定目錄,並上傳檔案到伺服器該二級目錄。如下:
#!/bin/sh
cp $1 $2
ftp -n $3 《其中$1、$2、$3、$4、$5、$6、$7均為輸入引數,分別表示正在使用的檔案、需要上傳的備份檔案、遠端主機ip位址、ftp伺服器使用者名稱、ftp伺服器密碼、ftp伺服器一級目錄、ftp伺服器二級目錄。
呼叫該指令碼的c程式**為:
pid_t pid;
if((pid = fork()) < 0)
perror("fork error");
else if(pid == 0)
waitpid(pid,null,0);//以阻塞方式呼叫子程序,直到ftp的返回結果
問題是這樣一來,程式不能知道ftp到底執行成功沒有,如果沒有,waitpid(pid,null,0)需要等大約3分鐘才能知道結果。網上查了很多ftp的資料,都沒有客戶端設定超時時間的方法。後來想到用程式計時的方式和非阻塞等待的方式呼叫waitpid,修改的**如下:
pid_t pid,pidrtn;
struct timeval tvstart,tvend;
float timeuse=0;
gettimeofday(&tvstart,null);
if((pid = fork()) < 0)
perror("fork error");
else if(pid == 0)
//呼叫ftp的指令碼,自設定時,waitpid的wnohang選項,參考waitpid.c
while(timeuse < 10)
else break;
gettimeofday(&tvend,null);
timeuse = 1000000*(tvend.tv_sec-tvstart.tv_sec)
+tvend.tv_usec-tvstart.tv_usec;
timeuse /=1000000;
}if(pidrtn == 0)
else printf("pidrtn:%d",pidrtn);
這樣一來就保證了ftp超時也能讓程式知道,超時時間也可以自己設定,而且可以執行後續的程式而不用掛死在這裡等ftp超時。
但是仍然有不完善的地方。大多數情況下,上傳需要多少時間程式設計師大概知道,從而設定較合理的超時時間。但是仍存在可能突然檔案很大,而超過超時時間,在超時時間之後實際上傳成功,而程式內顯示超時。所以,可以根據需上傳的檔案大小動態設定超時時間。當然,最理想的是,超過設定的超時時間之後,馬上關掉ftp的執行。這個不是關閉子程序就行的,目前也沒找到好的方法。
php指令碼超時時間設定
設定php指令碼執行超時的時間有下面這樣一些方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,倘若你有乙個需要頗多時間才能完成的工作,例如要傳送很多電子郵件給大量收件者,或者要進行繁重的資料分析工作,伺服器會在 30...
php指令碼超時時間設定
設定php指令碼執行超時的時間有下面這樣一些方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,倘若你有乙個需要頗多時間才能完成的工作,例如要傳送很多電子郵件給大量收件者,或者要進行繁重的資料分析工作,伺服器會在 30...
php int 設定超時,php如何設定超時時間
php設定超時的解決方法 1 初始設定指令碼執行時間 開啟php.ini檔案,找到 max execution time 30 修改為 max execution time 600 如果你沒有伺服器修改許可權,可通過內建php指令碼的方法設定超時時間,在需要首席執行官時間操作的php檔案中新增以下 ...