你们注意的是,下述命令中显示只是得出进程信息中的一部份

linux中我们对于判定一个进程是否正在运行,再bash中还是挺好解决的,这时我们可以用ps命令来查看各个进程的状态。下边时自己常用的一些ps的选项。

psa显示现行终端机下的所有程序,包括其他用户的程序

很其实这不是所有系统中的进程,这时侯我们可以用ps-e或ps-A(这两个命令的疗效一样),

linux运行c程序_程序运行按哪个键_程序运行时最小的调度单位

假如我们须要见到进程的全部信息,例如进程名,我们须要ps-ef这个命令,f选项代表着整个进程的信息,才能了解到进程的进程名,

在这里插入图片描述

其实很ps-ef也是一个进程,

这么我们怎样在c程序中来判定一个进程是否在运行呢,我们可以如此想linux运行c程序,居然在bash中我们可以判定进程是否运行,那不我们是否可以在c程序中就能借助它来判定进程是否正在运行。

执行c程序是一个进程,bash也是一个进程,这样很显著使用借助多进程,和进程间通讯的相关知识,上面我们学习了fork后借助exec来实现调用另一个进程,这样做是比较麻烦的,我们可以用popen这个系统调用来玩成想关的任务,

程序运行按哪个键_linux运行c程序_程序运行时最小的调度单位

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

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

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

接出来是使用popen函数,

程序运行时最小的调度单位_程序运行按哪个键_linux运行c程序

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流linux运行c程序红旗linux系统,必须由pclose来中止。上面提及这个流是双向的。所以向这个流写内容相当于写入该命令的标准输入;命令的标准输出和调用popen的进程相同。与之相反的,从流中读数据相当于读取命令的标准输出;命令的标准输入和调用popen的进程相同。

程序运行按哪个键_程序运行时最小的调度单位_linux运行c程序

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

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

下边是具体的代码:

#include 
#

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复