• Linux 判断进程是否已经运行的程序


     1   bool
     2   ServerProcess::isAlreadyRunning()
     3   {
     4   #ifndef __linux__
     5      WarningLog(<<"can't check if process already running on this platform (not implemented yet)");
     6      return false;
     7   #else
     8      if(mPidFile.size() == 0)
     9      {
    10         // if no PID file specified, we do not make any check
    11         return false;
    12      }
    13   
    14      pid_t running_pid;
    15      std::ifstream _pid(mPidFile.c_str(), std::ios_base::in);
    16      if(!_pid.good())
    17      {
    18         // if the file doesn't exist or can't be opened, just ignore
    19         return false;
    20      }
    21      _pid >> running_pid;
    22      _pid.close();
    23   
    24      StackLog(<< mPidFile << " contains PID " << running_pid);
    25   
    26      Data ourProc = Data("/proc/self/exe");
    27      Data otherProc = Data("/proc/") + Data(running_pid) + Data("/exe");
    28      char our_exe[513], other_exe[513];
    29      int buf_size;
    30   
    31      buf_size = readlink(ourProc.c_str(), our_exe, 512);
    32      if(buf_size < 0 || buf_size == 512)
    33      {
    34         // if readlink fails, just ignore
    35         return false;
    36      }
    37      our_exe[buf_size] = 0;
    38   
    39      buf_size = readlink(otherProc.c_str(), other_exe, 512);
    40      if(buf_size < 0 || buf_size == 512)
    41      {
    42         // if readlink fails, just ignore
    43         return false;
    44      }
    45      other_exe[buf_size] = 0;
    46   
    47      if(strcmp(our_exe, other_exe) == 0)
    48      {
    49         ErrLog(<<"already running PID: " << running_pid);
    50         return true;
    51      }
    52      return false;
    53   #endif
    54   }
  • 相关阅读:
    JavaScript基础知识-标识符
    free命令常用参数详解及常用内存工具介绍
    GO语言的进阶之路-初探GO语言
    HTML&CSS基础-字体的其它样式
    HTML&CSS基础-字体的分类
    HTML&CSS基础-字体的样式
    python运维常用相关模块
    HTML&CSS基础-颜色的单位表示方法
    HTML&CSS基础-长度单位
    HTML&CSS基础-定义列表
  • 原文地址:https://www.cnblogs.com/stevensfollower/p/5674825.html
Copyright © 2020-2023  润新知