欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Linux培訓(xùn)簡述Linux下/var/run/目錄下的pid文件詳解及pid文件作用

2019-08-09 14:44:02 4196瀏覽

Linux系統(tǒng)中/var/run/目錄下的*.pid文件是一個文本文件,其內(nèi)容只有一行,即某個進(jìn)程的PID。本篇文章扣丁學(xué)堂Linux培訓(xùn)小編主要給大家分享一下Linux下/var/run/目錄下的pid文件詳解及pid文件作用,需要的小伙伴就參考一下吧。


扣丁學(xué)堂Linux培訓(xùn)簡述Linux下/var/run/目錄下的pid文件詳解及pid文件作用


先給大家介紹下Linux下/var/run/目錄下的pid文件,具體詳解如下所示:


Linux系統(tǒng)中/var/run/目錄下的*.pid文件是一個文本文件,其內(nèi)容只有一行,即某個進(jìn)程的PID。.pid文件的作用是防止進(jìn)程啟動多個副本,只有獲得特定pid文件(固定路徑和文件名)的寫入權(quán)限(F_WRLCK)的進(jìn)程才能正常啟動并將自身的進(jìn)程PID寫入該文件,其它同一程序的多余進(jìn)程則自動退出。



編程實(shí)現(xiàn):


 調(diào)用fcntl()系統(tǒng)調(diào)用設(shè)置指定的pid文件為F_WRLCK鎖狀態(tài),如果鎖成功則寫入當(dāng)前進(jìn)程的PID,進(jìn)程繼續(xù)往下執(zhí)行;如果上鎖失敗則說明已經(jīng)有同樣的進(jìn)程在運(yùn)行了,當(dāng)前進(jìn)程退出。


#define PID_FILE "/var/run/xxxx.pid"
int lock_file(int fd)
{
  struct flock fl;
  fl.l_type = F_WRLCK;
  fl.l_start = 0;
  fl.l_whence = SEEK_SET;
  fl.l_len = 0;
  return (fcntl(fd, F_SETLK, &fl));
}
int alone_runnind(void)
{
  int fd;
  char buf[16];
  fd = open(PID_FILE, O_RDWR | O_CREAT, 0666);
  if (fd < 0)
  {
    perror("open");
    exit(1);
  }
  if (lock_file(fd) < 0)
  {
    if (errno == EACCESS || errno == EAGAIN)
    {
      close(fd);
      printf("alone runnind\n");
      return -1;
    }
    printf("can't lock %s: %s\n", PID_FILE, strerror(errno));
  }
  ftruncate(fd, 0);  //設(shè)置文件的大小為0
  sprintf(buf, "%ld", (long)getpid());
  write(fd, buf, strlen(buf) + 1);
  return 0;
}


需要注意:


1、程退出后該進(jìn)程加的鎖自動失效;
2、進(jìn)程關(guān)閉了該文件描述符fd,則加的鎖失效。(所以整個進(jìn)程生命周期內(nèi)不能關(guān)閉該fd);
3、鎖的狀態(tài)不會被子進(jìn)程繼承,如果進(jìn)程關(guān)閉則失效而不管子進(jìn)程是否運(yùn)行。



下面介紹下Linux下/var/run目錄下的pid文件作用


在Linux系統(tǒng)的目錄/var/run下面一般我們都會看到很多的*.pid文件。而且往往新安裝的程序在運(yùn)行后也會在/var/run目錄下面產(chǎn)生自己的pid文件。那么這些pid文件有什么作用呢?它的內(nèi)容又是什么呢?


(1) pid文件的內(nèi)容:pid文件為文本文件,內(nèi)容只有一行, 記錄了該進(jìn)程的ID。

用cat命令可以看到。


(2) pid文件的作用:防止進(jìn)程啟動多個副本。只有獲得pid文件(固定路徑固定文件名)寫入權(quán)限(F_WRLCK)的進(jìn)程才能正常啟動并把自身的PID寫入該文件中。其它同一個程序的多余進(jìn)程則自動退出。


(3) 編程技巧:

調(diào)用fcntl設(shè)置pid文件的鎖定F_SETLK狀態(tài),其中鎖定的標(biāo)志位F_WRLCK。

如果成功鎖定,則寫入進(jìn)程當(dāng)前PID,進(jìn)程繼續(xù)往下執(zhí)行。

如果鎖定不成功,說明已經(jīng)有同樣的進(jìn)程在運(yùn)行了,當(dāng)前進(jìn)程結(jié)束退出。


lock.l_type = F_WRLCK;
 lock.l_whence = SEEK_SET;

 if (fcntl(fd, F_SETLK, &lock) < 0){
  //鎖定不成功, 退出......
 }
sprintf (buf, "%d\n", (int) pid);
 pidsize = strlen(buf);
 if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){
  //寫入不成功, 退出......
 }


(4) 一些注意事項(xiàng):


1、如果進(jìn)程退出,則該進(jìn)程加的鎖自動失效。
2、如果進(jìn)程關(guān)閉了該文件描述符fd, 則加的鎖失效。(整個進(jìn)程運(yùn)行期間不能關(guān)閉此文件描述符)
3、鎖的狀態(tài)不會被子進(jìn)程繼承。如果進(jìn)程關(guān)閉則鎖失效而不管子進(jìn)程是否在運(yùn)行。



想要了解更多關(guān)于Linux開發(fā)方面內(nèi)容的小伙伴,請關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育有專業(yè)的Linux講師為您指導(dǎo),此外扣丁學(xué)堂老師精心推出的Linux視頻教程定能讓你快速掌握Linux從入門到精通開發(fā)實(shí)戰(zhàn)技能??鄱W(xué)堂Linux技術(shù)交流群:422345477。



扣丁學(xué)堂微信公眾號                          Python全棧開發(fā)爬蟲人工智能機(jī)器學(xué)習(xí)數(shù)據(jù)分析免費(fèi)公開課直播間


      【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】         【掃碼進(jìn)入Python全棧開發(fā)免費(fèi)公開課】



查看更多關(guān)于“Linux培訓(xùn)資訊”的相關(guān)文章>>
標(biāo)簽: Linux培訓(xùn) Linux視頻教程 紅帽Linux視頻 Linux學(xué)習(xí)視頻 Linux入門視頻 紅帽RHCE/RHCSA考試

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部