如何使电脑不会重复启动同一个进程

简介:

---让程序不能被多次运行
---问题
(1)因为守护进程是长时间运行而不退出,因此./a.out执行一次就有一个进程,执行多次就有多个进程。
(2)这样并不是我们想要的。我们守护进程一般都是服务器,服务器程序只要运行一个就够了,多次同时运行并没有意义甚至会带来错误。
(3)因此我们希望我们的程序具有一个单例运行的功能。意思就是说当我们./a.out去运行程序时,如果当前还没有这个程序的进程运行则运行之,如果之前已经有一个这个程序的进程在运行则本次运行直接退出(提示程序已经在运行)。
---实现方法:
(1)最常用的一种方法就是:用一个文件的存在与否来做标志。具体做法是程序在执行之初去判断一个特定的文件是否存在,若存在则标明进程已经在运行,若不存在则标明进程没有在运行。然后运行程序时去创建这个文件。当程序结束的时候去删除这个文件即可。
(2)这个特定文件要古怪一点,确保不会凑巧真的在电脑中存在的。

{
// 程序执行之初,先去判断文件是否存在
int fd = -1;
fd = open(FILE, O_RDWR | O_TRUNC | O_CREAT | O_EXCL, 0664);
if (fd < 0)
{
if (errno == EEXIST)
{
printf("进程已经存在,并不要重复执行\n");
return -1;
}
}
atexit(delete_file);    // 注册进程清理函数
int i = 0;
for (i=0; i<10; i++)
{
printf("I am running...%d\n", i);
sleep(1);
}
return 0;
}
void delete_file(void)
{
remove(FILE);
}

https://blog.csdn.net/u011572037/article/details/70162114

目录
相关文章
|
3月前
|
Windows
网友的电脑中发现scvhsot.exe的进程和启动项
网友的电脑中发现scvhsot.exe的进程和启动项
续:网友的电脑中发现scvhsot.exe的进程和启动项
续:网友的电脑中发现scvhsot.exe的进程和启动项
|
4月前
|
JavaScript Windows
NodeJs——如何获取Windows电脑指定应用进程信息
NodeJs——如何获取Windows电脑指定应用进程信息
120 0
|
安全 芯片 Python
电脑芯片inter i7 10700, 进行多进程并行运算时,最多可以选16个线程
------------电脑芯片是inter i7 10700, 应该是 8核16线程, 在跑python代码,multiprocessing 模块 进行多进程并行运算时,最多可以选多少个线程 由于电脑芯片是Intel i7 10700,应该有8个物理核心和16个逻辑线程(因为支持超线程技术),所以最多可以选择使用16个线程来并行运行Python代码。
384 0
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
130 13
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
182 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。