linux中如何在c程序判断一个程序是否运行

大家注意的是,下列命令中显示只是得出进程信息中的一部分

再linux中我们对于判断一个进程是否正在运行,再bash中还是很好解决的,这时我们可以用ps命令来查看各个进程的状态。下面时自己常用的一些ps的选项。
ps a 显示现行终端机下的所有程序,包括其他用户的程序
在这里插入图片描述
很显然这不是所有系统中的进程,这时候我们可以用ps -e 或ps -A(这两个命令的效果一样),
在这里插入图片描述
如果我们需要看到进程的全部信息,比如进程名,我们需要ps -ef这个命令,f选项代表着整个进程的信息,能够了解到进程的进程名,
在这里插入图片描述
当然很ps -ef也是一个进程,
在这里插入图片描述

那么我们如何在c程序中来判断一个进程是否在运行呢,我们可以这么想,竟然在bash中我们可以判断进程是否运行,那不我们是否可以在c程序中能够利用它来判断进程是否正在运行。
执行c程序是一个进程,bash也是一个进程,这样很明显使用利用多进程,和进程间通信的相关知识,前面我们学习了fork后利用exec来实现调用另一个进程,这样做是比较麻烦的,我们可以用popen这个系统调用来玩成想关的任务,

首先我们需用选择我们说要执行的命令

snprintf(command, sizeof(command), "ps -ef | grep -w %s | wc -l ", proname);

proname传进来的程序名,具体可看后面的源代码解释,利用snprintf函数我们可以将要执行的命令传进command中,具体的思路是,利用ps -ef显示所用进程的信息,然后用管道后用grep -w %s 来精确查找出所匹配的字符串的那一行,wc -l显示数据中的行数。

接下来是使用popen函数,

fp=popen(command, "r");

popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。pclose() 函数关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状态。如果 shell 不能被执行,则 pclose() 返回的终止状态与 shell 已执行 exit 一样。
第一个参数是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用-c 标志,shell 将执行这个命令。
第二个参数:“r” 则文件指针连接到 command 的标准输出;如果 type 是 “w” 则文件指针连接到 command 的标准输入。
popen 的返回值是个标准 I/O 流,必须由 pclose 来终止。前面提到这个流是单向的。所以向这个流写内容相当于写入该命令的标准输入;命令的标准输出和调用 popen 的进程相同。与之相反的,从流中读数据相当于读取命令的标准输出;命令的标准输入和调用 popen 的进程相同。

利用fgets我们可以显示出fp这个文件流中的信息,fgets的重用是一次输出一行

if((fgets(buf, sizeof(buf), fp)) != NULL)
        {
   
                count = atoi(buf);
                //printf("%d\n", count);
        }

下面是具体的代码:

#include <stdio.h>
#
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值