linux C++ 防止多个程序运行

本文介绍了一种通过保存程序PID并在特定目录下检查文件存在的方法来防止程序被多次重复运行的技术。程序首先尝试读取PID文件,如果存在且对应的进程路径有效,则输出进程正在运行并退出;若不存在,则获取当前PID并写入文件,然后继续执行程序的主要功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面的一段程序可以防止程序被多次重复运行。

原理: 程序运行时会将程序pid保存在一个文件中,

            当其它程序运行时,会读取这个pid,并且查看“/proc/[pid]”是否存在;

            如果路径存在,说明已有程序在运行,推出, 如果不存在,运行程序

int main(int argc, char* argv[])
{
        pid_t pid;
        FILE *fp;
        char pidBuf[10];
        std::string pidTxtPath = curPath + "/pid.txt";

        if((fp=fopen(pidTxtPath.c_str(), "r")) != NULL ){
                fgets(pidBuf, 10, fp);
                char pidPath[20];
                sprintf(pidPath, "/proc/%s", pidBuf);
    
                if(access(pidPath, F_OK) == 0)
                {
                        printf("progress is running\n");
                        fclose(fp);
                        return -1; 
                }
                fclose(fp);
        }

        pid = getpid();
   
        if((fp=fopen(pidTxtPath.c_str(), "wb+")) == NULL)
        {
                printf("cannot open file\n");
                exit(0);
        }
        fprintf(fp, "%d", pid); 
        fclose(fp);

        /////////////// do program

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值