介紹
通常後台伺服器程式都必須有且只有乙個程序,那麼如何單程序呢?
本例子是通過flock函式對/var/run/myserver.pid記錄pid檔案的進行加鎖
後台服務程式單程序控制
詳細不多說,直接看**
#include
#include hmhupb.h>
#include
#include
#include &www.cppcns.comlt;errno.h>
#include
#define pid_buf_len (20)
#define run_pid_file "/var/run/myserver.pid"
//服務程序單例項執行
//返回值: 1--正在執行,0--未執行,-1--出錯
int server_is_running()
www.cppcns.com
// 加鎖
// lock_sh 建立共享鎖定。多個程序可同時對同乙個檔案作共享鎖定。
// lock_ex 建立互斥鎖定。乙個檔案同時只有乙個互斥鎖定。
if(flock(fd, lock_ex|lock_nb) == -1)
// 加鎖成功,證明服務沒有執行
// 檔案控制代碼不要關,也不要解鎖
// 程序退出,自動就解鎖了
printf("myserver is not running! begin to run..... pid=%ld\n", (long)getpid());
char pid_buf[pid_buf_len] = ;
snprintf(pid_buf, sizeof(pid_buf)-1, "%ld\n", (long)getpid());
// 把程序pid寫入到/var/run/myserver.pid檔案
write(fd, pid_buf, strlen(pid_buf));
return 0;
}int main(void)
while(1)
return 0;
}執行結果
執行程式,可知程序pid是6965
[root@lincoding singleprocess]# ./myserver
server is not running! begin to run..... pid=6965
myserver doing ...
myserver doing ...
myserver doing ...
myserver doing ...
myserver doing ...
myserver doing ...
myserver doing ...
myserver do程式設計客棧ing ...
/var/run/myserver.pid 也記錄此程序的pid號,ps auxf | grep myserver可知mysever程序一直執行著
[root@lincoding singleproce程式設計客棧ss]# cat /var/run/myserver.pid
6965
[root@lincoding singleprocess]#
[root@lincoding singleprocess]# ps auxf | grep myserver
root 6965 0.0 0.0 3924 460 pts/0 s+ 00:32 0:00 | \_ ./myserver
root 9976 0.0 0.0 103256 856 pts/1 s+ 00:35 0:00 \_ grep myserver
[root@lincoding singleprocess]#
此時,再執行myserver程式,這時會報錯退出,因為檢測到myserver程式已經在執行中,不可以起另外乙個程序,從而達到了後台服務程式單程序控制
[root@lincoding singleprocess]# ./myserver
server is runing now! errno=11
myserver process is running!!!!! current process will exit !
本文標題: linux c 後台服務程式單程序控制的實現
本文位址:
後台服務小點
很多東西本來就存在,只是自己不懂,記錄在此,以便日後複習唄。今天碰到乙個問題就是專案中的靜態頁面是分開的,比如當面部落格頁面,它的頭是單獨的乙個html檔案,而下來的內容又是另外乙個,從專案本身以及在布置到伺服器上都沒有發現拼裝過程,於是好奇之,這是為啥呢,原來nginx早已具有這樣的功能,就是ss...
Linux 後台服務
方法一 fork方式 1.fork乙個子程序,父程序退出,子程序成為孤兒程序,被init程序接管 2.呼叫setsid建立新的程序會話 3.將當前工作目錄切換到根目錄 4.將標準輸入,輸出,出錯重定向到 dev null linux後台程序,fork方式 include include includ...
Mac 後台服務
mac 的後台服務通過launchctl工具實現 也可以使用linux下的crontab 但官方建議使用launchctl。使用launchctl非常簡單,根據需要編寫plist指令碼即可。plist指令碼存放路徑為 library launchdaemons或 library launchagen...