C++进程PID编程

2023-05-16

一 获取pid_t的字节长度 

1 代码

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    pid_t pid;
    cout <<"sizeof(pid_t)="<< sizeof(pid_t) << endl;     
    return 0;
}

2 运行结果

[root@localhost test]# g++ test.cpp -o test
[root@localhost test]# ./test
sizeof(pid_t)=4

二 获取当前进程的ID

1 代码

#include <iostream>
#include <unistd.h>
using namespace std;

int main(int argc, char *argv[])
{
    pid_t pid = getpid();
    cout <<"pid="<<pid << endl;     
    return 0;
}

2 运行结果

[root@localhost test]# g++ test.cpp -o test
[root@localhost test]# ./test
pid=1006

三 通过PID文件判断进程是否运行

1 代码

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>

static  char starter_pid_file_default[] =  "/var/run/test.pid";


static bool check_pid(char *pid_file)
{
    struct stat stb;
    FILE *pidfile;

    if (stat(pid_file, &stb) == 0)
    {
        pidfile = fopen(pid_file, "r");
        if (pidfile)
        {
            char buf[64];
            pid_t pid = 0;
            memset(buf, 0, sizeof(buf));
            if (fread(buf, 1, sizeof(buf), pidfile))
            {
                buf[sizeof(buf) - 1] = '\0';
                pid = atoi(buf);
            }
            fclose(pidfile);
            if (pid && kill(pid, 0) == 0)
            {    /* such a process is running */
                printf("pid=%d",pid);
                return 1;
            }
        }
        printf("removing pidfile '%s', process not running", pid_file);
        unlink(pid_file);
    }
    return 0;
}


int main()
{
    FILE *fd = fopen(starter_pid_file_default, "w");

    if (fd)
    {
        fprintf(fd, "%u\n", getpid());
        fclose(fd);
    }
    if (check_pid(starter_pid_file_default))
    {
        printf("test is already running (%s exists)\n", starter_pid_file_default);
        
    }
    else
        printf("test is NOT running (%s NOT exists)\n", starter_pid_file_default);
    
    unlink(starter_pid_file_default);
    
    
    return 0;
    
}

2 运行结果

[root@localhost test]# g++ test.cpp -o test
[root@localhost test]# ./test
pid=1016test is already running (/var/run/test.pid exists)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++进程PID编程 的相关文章

  • 关于ARM_math数学库的使用

    关于ARM math数学库的使用 ARM math好强大的好吧 话不多说 请看截图 各种数学库看到没有 好强大的说 其实使用这些写函数 最快上手的方法就是看官方手册 话不多说 上官方链接arm math库的官网 举个栗子 一般步骤 1 首先
  • 串级PID与单极PID的区别

    目录 前言 一 什么是串级PID 二 串级PID与单极PID比较 1 控制小车开到某一位置 2 平衡小车速度控制 三 什么时候用串级PID 结语 前言 本文将讲述串级PID与单极PID的区别 并由此引出什么时候用串级PID 对于想深入学习P
  • PID算法应用于室内温度控制的C语言实现

    我最近在学习PID算法 对此很感兴趣 所以与大伙分享下 有不足的地方欢迎指出 非常谢谢 PID算法的基本内容本篇博客就不做阐述了 网上有很多资料 文章的主题是用C语言实现PID算法 为了更好的理解 我采用软件模拟室内温度控制的方式与大伙分享
  • Android : 通过pid获取app包名

    方法一 这个方法用在app主线程的activity或service里 因为要有context获取am private String getAppName int pid String pkgName ActivityManager am A
  • 【STM32CubeMX】位置式PID调节控制输出电压(超详解)

    本文将借助STM32CubeMX来配置ADC DMA DAC USART 并利用PID位置式算法实现对输出电压进行AD采集通过PID算法调节DAC 获取到我们想要的电压值 讲解的主要知识 何为PID以及为何需要PID STM32CubeMX
  • TSI系统测量参数之:轴向振动

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 2 轴向振动 测量的是大轴相对于轴瓦的X向振动和Y向振动 反馈电压量程为 4V至
  • 如何在C++中使用system()命令获取执行进程的pid

    当我们使用system 命令 程序等待完成 但我正在执行process using system 并使用负载平衡服务器 因为该程序在执行系统命令后立即进入下一行 请注意 process可能不完整 system my script after
  • 在 Unix 环境中检测过时的 pid 文件

    在 Unix 环境中检测陈旧 pid 文件的标准 跨平台方法是什么 假设我想终止应用程序的旧实例 但如果该应用程序已经退出 我当然不想破坏具有相同 PID 的不相关进程 现在我找到了一种在我的 Ubuntu 也可能是其他基于 GNU Lin
  • 什么是 .pid 文件以及它包含什么?

    我最近遇到了一个扩展名为 pid 的文件 并查看了它的内部 但没有找到太多内容 这文档 says Pid 文件是包含进程标识号 pid 的文件 该文件存储在文件系统的明确定义位置 从而允许其他程序找到正在运行的脚本的 pid 任何人都可以对
  • Java程序如何获得自己的进程ID?

    如何获取我的 Java 进程的 ID 我知道有几种依赖于平台的技巧 但我更喜欢更通用的解决方案 不存在可以保证在所有 jvm 实现中工作的独立于平台的方法 ManagementFactory getRuntimeMXBean getName
  • C - 获取用popen打开的进程的PID

    我有一个用 C 编写的程序 它使用 popen 打开另一个程序 我想获取该程序的 pid 或某种处理程序 以便在一定时间限制后 或者在它超出某些 ram 和 stdout 限制时杀死它 我认为这必须用ptrace来完成 它需要PID 但我不
  • mac os x 下进程使用的内存

    给定PID 如何获取进程当前使用的内存 具体来说 我正在寻找 进程使用的私有物理内存 RAM 进程使用的交换空间 但我对映射文件和共享内存不感兴趣 简而言之 我想确定通过终止 PID 将释放多少内存 RAM 和交换 这有用吗 您可以使用ps
  • 使用批处理查找java PID

    我需要从 Windows 批处理控制台知道 java 进程 PID echo off set p CD FOR F tokens 1 A IN JAVA HOME bin jps exe v find p DO SET str A echo
  • 检查给定 pid 的进程是否存在

    给定 Linux 进程的 pid 我想从 C 程序检查该进程是否仍在运行 Issue a kill 2 http linux die net man 2 kill系统调用0作为信号 如果调用成功 则说明存在该pid的进程 如果呼叫失败并且e
  • 有没有办法链接linux的线程TID和pthread_t“线程ID”

    在 Linux 上 线程由pthread t或 TID 我正在寻找这两种线程 id 之间的桥梁 given a pthread t我可以得到它吗TID 显然 https stackoverflow com questions 558469
  • 如何在Windows中通过端口查找PID并使用java杀死找到的任务

    我需要通过进程端口在java代码中杀死进程 我可以在 cmd 中手动执行此操作 例如 C gt netstat a n o findstr 6543 TCP 0 0 0 0 6543 0 0 0 0 0 LISTENING 1145 TCP
  • 如何通过VBA获取当前Excel实例的进程ID,而不使用标题?

    如何获取运行 VBA 代码的当前 Excel 实例的进程 ID 我不想通过标题中的名称来请求它 当我有两个或多个具有相同标题的 Excel 实例时 这会导致问题 您可以使用此方法来获取当前进程ID Declare Function GetC
  • 多处理时如何获取每个进程ID

    我有一些问题 因为我是 Python 和 Pyside 的新手 我有N个进程同时运行 由于这些进程需要一些时间才能完成其工作 因此最终用户可能想要取消特定进程 因此 我需要一种方法来了解进程的 ID 以便将此功能添加到程序中 有一个answ
  • 如何停止rabbitmq服务器

    我正在尝试启动一个节点应用程序 但我认为rabbitmq 妨碍了我 与此线程类似 名为 rabbit 的节点已经在运行 但也 无法连接到节点 rabbit https stackoverflow com questions 8737754
  • 如何从 Ruby 检查具有特定 pid 的进程是否正在运行?

    如果有多种方法 请列出 我只知道一个 但我想知道是否有一种更干净的 Ruby 方式 之间的区别Process getpgid and Process kill方法似乎是当 pid 存在但由另一个用户拥有时发生的情况 Process getp

随机推荐

  • CAN总线基础知识(一)

    1 xff0e CAN总线是什么 xff1f CAN xff08 Controller Area Network xff09 是ISO国际标准化的串行通信协议 广泛应用于汽车 船舶等 具有已经被大家认可的高性能和可靠性 CAN控制器通过组成
  • 【ROS Gazebo专题】二、Gazebo的使用上

    跳的比较快 xff0c 别人光介绍基础以及ros的基本操作就写了十几二十篇 xff0c 我一下就跳到了Gazebo这 xff0c 可怕有没有 其实原因很简单 xff0c 如果你将ros官网的基础篇章练习完了 xff0c 在最后一篇 wher
  • 程序员也该懂点UI细节

    虽然说项目开发过程中 xff0c 美工和程序各司其职 但是很多时候程序员本身也要知道一些UI设计的细节 一 每个页面的功能上要突出重点 比如说你首页是想引导更多用户注册的话 xff0c 你就要把注册按钮突出出来 如果你首页是你想引导用户更快
  • ftp 客户端软件的传输模式ASCII和二进制

    FTP可用多种格式传输文件 xff0c 通常由系统决定 xff0c 大多数系统 包括UNIX系统 只有两种模式 xff1a 文本模式和二进制模式 文本传输器使用ASCII字符 xff0c 并由回车键和换行符分开 xff0c 而二进制不用转换
  • 一步一步定制自己的google map(各个省市的经纬度查询)

    安徽省 合肥 北纬31 52 东经117 17 安徽省 安庆 北纬30 31 东经117 02 安徽省 蚌埠 北纬32 56 东经117 21 安徽省 亳州 北纬33 52 东经115 47 安徽省 巢湖 北纬31 36 东经117 52
  • 网页刷新或者重新加载后滚动条的位置不变

    在开发的过程中我们经常需要重新加载或者刷新某个画面 xff0c 已确保数据显示是最新的 但是如果一丁点改变就刷新画面的话 xff0c 会导致用户体验很差 xff0c 想想看你好不容易把网页拖到最后 xff0c 结果点击某个按钮的时候 xff
  • 番茄工作法(番茄钟时间管理)

    番茄工作法是我一次偶然的时间在网上看到的 xff0c 因为自己性格大大咧咧 丢三落四 xff0c 所以经常容易在时间问题上犯迷糊 很多人都有时间拖沓症 xff0c 就是一件事不到最后阶段不去解决它 比如你有一个星期的时间写的毕业论文 xff
  • jquery中美元符号($)命名冲突

    在Jquery中 xff0c 是JQuery的别名 xff0c 所有使用 的地方也都可以使用JQuery来替换 xff0c 如 39 msg 39 等同于JQuery 39 msg 39 的写法 然而 xff0c 当我们引入多个js库后 x
  • Django的密码操作

    一 关于密码操作的思维导图 二 修改密码内置函数源码 64 sensitive post parameters 64 csrf protect 64 login required 64 deprecate current app def p
  • js实现省市联动

    效果图如下 xff1a 思路很简单 xff0c 就是先加载省信息 xff0c 然后当省改变的时候加载市县信息 烦的是数据的录入 xff0c 代码如下 lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 T
  • 正则在小偷程序中的应用(续)

    获取资源信息 content 61 file get contents 34 http list sososteel com qg list html pg 61 1 amp h 61 34 time 对抓取的信息进行处理 取class为l
  • mysql密码过期问题解决方案

    mysql密码过期问题解决方案 问题再现 xff1a 密码过期 旧电脑许久没有用 xff0c 今天打开发现数据库连接不上了 提示密码过期 xff0c 请修改密码 ERROR 1862 HY000 Your password has expi
  • Fast RTPS(DDS) 安装指南

    Foonathan Memory 在构建 Fast DDS 之前 xff0c 需要先安装 Foonathan Memory 依赖 span class token function git span clone https github c
  • ubuntu的两种软件安装方式

    第一种 xff1a sudo apt get install xxxxxxx 第二种 xff1a sudo dpkg i xxxx deb 参考文章
  • Ethernet下字节序和bit序的总结

    Ethernet下字节序和bit序的总结 本文讲述的是在ethernet中多字节数据发送时涉及到字节序和bit序的剖析 关于字节序 大小端 和bit序 xff0c 以及MSB和LSB的叙述 xff0c 请另行学习 xff0c 本篇不涉及 正
  • C++ 智能指针 unique_ptr 详解与示例

    unique ptr 是 C 43 43 11 提供的用于防止内存泄漏的智能指针中的一种实现 xff0c 独享被管理对象指针所有权的智能指针 unique ptr对象包装一个原始指针 xff0c 并负责其生命周期 当该对象被销毁时 xff0
  • ECMAScript 6 中的数组方法 - forEach

    let colors 61 red blue green es5 遍历数组的方法 span class hljs keyword for span let span class hljs keyword index span 61 span
  • ECMAScript 6 中的数组方法 - map

    span class hljs variable span 场景 span class hljs number 1 span 假设有一个数字数组 xff08 a xff09 xff0c 奖a数组中的值一双倍的形式放到b数组 span cla
  • 写在Paper Reading之前

    写在Paper Reading 之前 2016年第一篇文章 xff0c 就以paper reading开头 xff0c 这段时间最少写五篇 xff0c 达到申请专栏的条件 通过申请专栏 xff0c 也可以达到监督作用 xff0c 催促自己多
  • C++进程PID编程

    一 获取pid t的字节长度 1 代码 include lt iostream gt using namespace std int main int argc char argv pid t pid cout lt lt 34 sizeo