小插曲 -- 使用Linux编写 判断程序是否在运行的小程序

这篇具有很好参考价值的文章主要介绍了小插曲 -- 使用Linux编写 判断程序是否在运行的小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编写思路

首先,在执行“ps -elf |grep xxx”时,如果xxx存在,通常会有两条结果,一个是xxx对应的PID,一个则是grep对应的PID,但是如果我希望执行命令后,xxx存在就只有xxx对应的PID,不存在就什么都不显示的话,可以将指令修改成:“ps -elf |grep XXX|grep -v grep”,这样就可以屏蔽显示grep对应的PID,实现我想要的效果!

那么基于这个命令的特性,就可以编写一个判断程序是否正在运行的demo了,具体思路如下:

使用popen函数来执行“ps -elf |grep XXX|grep -v grep”,然后读取执行的结果,如果不为空且包含“XXX”,就说明程序正在运行!否则就是不在运行!

预备小知识点

strcat函数

【C库函数】strcat函数详解_爱躺平的威威的博客-CSDN博客

strstr函数

字符串操作函数strstr_白日曛的博客-CSDN博客

代码实现

在实际的运行中发现,如果程序不在运行,执行“ps -elf |grep XXX|grep -v grep”的运行结果打印出来最后都会有“00:00:00 ./ifrun XXX\n”(注意最后还有一个换行符) ,所以XXX最少会出现一次。(其实原因就是我写的代码ifrun也是一条进程,我把XXX作为参数传入后运行,而ps这条指令是找到所有带有XXX关键词的进程,我在ps指令里忽略了grep相关的结果,但没有忽略ifrun相关的结果,所以结果也会包含我现在ifrun的这个进程!也就是说,其实这里应该再次修改ps命令同时过滤grep和ifrun,这样结果就会很更干净,就可以使用本节开头使用的那套逻辑了,但是我反应的比较晚,就懒得改了,反之代码能实现我的要求就好)

对于这种情况,我采取了以下的方法来判断:

先用strstr,在popen执行的结果中查找XXX,并用cmp来保存返回值。

如果程序不在运行,此时cmp的值就应该是“XXX\n”,所以此时再判断cmp的长度,如果比XXX多了1,说明程序不在运行!反之,程序就在运行!

ifrun.c:

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    FILE *file;
    char buffer[128] = {'\0'};
    char cmd1[64] = "ps -elf |grep "; //作为strcat的对象,必须为字符串“变”量
    char *cmd2 = "|grep -v grep";
    char *cmp = NULL;

    if(argc != 2){
        printf("wrong argc num!\n");
        return 1;
    }

    strcat(cmd1,argv[1]);
    strcat(cmd1,cmd2); //此时cmd1为 “ps -elf |grep XXX|grep -v grep”
    //  printf("cmd = %s\n",cmd1);

    file = popen(cmd1, "r");
    fread(buffer, sizeof(char), 128, file);

    cmp = strstr(buffer,argv[1]);

    if(strlen(cmp) != strlen(argv[1])+1){
        printf("%s is running\n",argv[1]);
    }else{
        printf("%s is NOT running\n",argv[1]);
    }
    printf("INFO:%s\n",buffer);

    return 0;
}

实现效果: 

编译:

小插曲 -- 使用Linux编写 判断程序是否在运行的小程序,linux,运维,服务器,香橙派,嵌入式,开发语言,算法

然后尝试查看“test” 这个文件是否在执行:

小插曲 -- 使用Linux编写 判断程序是否在运行的小程序,linux,运维,服务器,香橙派,嵌入式,开发语言,算法

显然,test没有在运行。

此时另开一个终端,随便写一个test.c,编译并运行test:

小插曲 -- 使用Linux编写 判断程序是否在运行的小程序,linux,运维,服务器,香橙派,嵌入式,开发语言,算法

此时回到刚刚那个终端再次运行“./ifrun test” :

小插曲 -- 使用Linux编写 判断程序是否在运行的小程序,linux,运维,服务器,香橙派,嵌入式,开发语言,算法

可见,此时程序就检测到了程序的运行,说明逻辑没有问题,代码编写成功!文章来源地址https://www.toymoban.com/news/detail-731502.html

到了这里,关于小插曲 -- 使用Linux编写 判断程序是否在运行的小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用NVMe的用户库libzbd编写和ZNS设备通讯的小程序

    libzbd是一个用户态库,用于与支持Zoned Namespace(ZNS)技术的SSD进行交互。以下是一个使用libzbd库编写向ZNS SSD写入数据并读取打印的简单程序。 请注意,该示例仅用于演示目的,并且省略了错误处理和其他细节。

    2024年02月16日
    浏览(39)
  • 小程序 检测是否添加至我的小程序

    添加小程序到我的小程序,给用户发卷,增加用户的添加,提高小程序的使用率 wx.checkIsAddedToMyMiniProgram() 功能描述 基础库 2.29.1 开始支持,低版本需做兼容处理。 检查小程序是否被添加至 「我的小程序」 属性 类型 默认值 必填 说明 success function 否 接口调用成功的回调函数

    2024年02月07日
    浏览(34)
  • 判断 Mac显卡 mps 是否可以正常运行

    使用 Apple 的 Metal Performance Shaders (MPS) 作为 PyTorch 的后端来启用加速 GPU 训练。 MPS 后端扩展了 PyTorch 框架,提供了在 Mac 上设置和运行操作的脚本和功能。 MPS 使用针对每个 Metal GPU 系列的独特特性进行微调的内核来优化计算性能。 新设备将机器学习计算图和基元映射到 MPS 提

    2024年02月15日
    浏览(50)
  • 使用vscode编写、运行Python程序

    vscode是一个代码编辑器,支持win10、Ubuntu等多种主流操作系统。vscode中有很多实用的拓展工具,借助这些工具,可以很方便地完成代码编写、调试、运行、版本管理。 vscode的下载地址为:https://code.visualstudio.com/Download,界面如下: 在下载界面中, 根据你的操作系统,选择不同

    2024年02月04日
    浏览(48)
  • 微信小程序 ——入门介绍及简单的小程序编写

    14天阅读挑战赛 自己决定的事情,就要不动声色的一往直前! 目录 一、小程序入门 1.1 什么是小程序 1.2 小程序的优点 1.3 小程序注册 1.4 安装开发工具 1.5 创建第一个小程序 二、小程序目录结构及入门案例 2.1 目录结构 2.2 入门案例 2.2.1 创建界面 2.2.2 设置标题 2.2.3 编写W

    2024年02月08日
    浏览(50)
  • 可视化界面Tkinter编写你的小程序

    本文将会介绍 Tkinter 模块的使用。Tkinter 模块是 Python 的标准 Tk GUI 工具包的接口。其中Tkinter 是唯一一个 Python 内置的标准库,虽然它做出来的 GUI 看上去比较不美观,但鉴于它可在多平台运行(Windows、Linux、macOS),因此我们可以用它来开发一些简单的小程序;而且tk中使用的

    2024年02月09日
    浏览(37)
  • 用python写的好玩的小程序,用python编写小程序

    这篇文章主要介绍了用python写的好玩的小程序,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 Hi,大家好。Python丰富的开发生态是它的一大优势,各种第三方库、框架和代码,都是前人造好的“轮子”

    2024年01月25日
    浏览(47)
  • 微信小程序如何判断对象是否为空、判断值是否存在

    在 js 文件中需要对 data 里一些的对象进行判断是否为空 比如这里我要在页面加载时判断 data 中的 record 是否为空: 在 onload() 方法中使用 Object.key().length0 来判断: Object.keys()方法:将给定对象的所有可枚举属性变成一个字符串数组 解释:将需要判断的对象转换为一个字符

    2024年02月11日
    浏览(105)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包