怎么样在Linux编程中查看某个指定的程序是否在运行?
在程序中查某个指定的程序在运行,或不在运行。如果在运行,怎么样得到它的进程ID? 问题点数:100、回复次数:14Top
1 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 12:48:18 得分 5
ps -ax|grep program_name
if found, the program is running, or the program is not running.Top
2 楼zhushizu(从来就没有救世祖)回复于 2004-09-01 13:44:36 得分 5
是呀,我也是想了好久。。关注中。。。Top
3 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 14:02:22 得分 50
#include <stdio.h>
#include <stddef.h>
#include <sys/types.h>
#include <dirent.h>
#include <signal.h>
// get pid by program name
int main (int argc, char* argv[])
{
DIR *pdir = NULL;
struct dirent *pde = NULL;
FILE *pf = NULL;
char buff[128];
char buff2[128];
char *pstr = NULL;
int pid, ppid;
int n;
int i;
pdir = opendir("/proc");
if (!pdir)
{
perror("open /proc fail.\n");
return -1;
}
while ((pde = readdir(pdir)))
{
if ((pde->d_name[0] < '0')
|| (pde->d_name[0] > '9'))
{
continue;
}
sprintf(buff, "/proc/%s/status", pde->d_name);
pf = fopen(buff, "r");
if (pf)
{
n = fread(buff, 1, 127, pf);
close(pf);
buff[n] = 0;
for (i = 0; i < n; i++)
{
if ('\n' == buff[i])
{
buff[i] = 0;
break;
}
}
//printf("== (%s) ==\n", buff);
n = i;
for (i = 0; i < n; i++)
{
if ((' ' == buff[i]) || ('\t' == buff[i]))
{
break;
}
}
for (; i < n; i++)
{
if ((' ' != buff[i]) && ('\t' != buff[i]))
{
break;
}
}
//printf("NAME: (%s)\n", buff + i);
if (0 == strcmp(buff + i, argv[1]))
{
printf("found %s, pid = %d\n", buff + i, atoi(pde->d_name));
break;
}
}
}
closedir(pdir);
return 0;
}
Top
4 楼lanting918(做人,要厚道!)回复于 2004-09-01 16:24:18 得分 10
system("ps -C proname");Top
5 楼fashion1840(唐傲)回复于 2004-09-01 16:59:21 得分 0
谢谢,老猫的。要不你留个MSN,或QQ,以后联系你。请多指教。Top
6 楼blh(当你不割肉时,你的损失只是个数字,当你割肉时,你的损失就是你的肉)回复于 2004-09-01 17:06:34 得分 0
“偶以不用QQ很多年,MSN那偶有玩不转”,活活Top
7 楼fashion1840(唐傲)回复于 2004-09-01 17:10:37 得分 0
哦。那你不是整个一个活现代吗??吼吼,开玩笑的。那你总有mail吧。yahoo messager,icq,aol,一个也没有吗???
Top
8 楼renhaobin2000()回复于 2004-09-01 17:19:10 得分 5
ps -AHTop
9 楼littleline()回复于 2004-09-01 17:41:55 得分 5
psTop
10 楼fashion1840(唐傲)回复于 2004-09-01 18:13:15 得分 0
ps 我也知道啊。但就一个PS能搞定吗???
答案是明确的,不行。老猫的可行。,thank you!Top
11 楼CoolQ()回复于 2004-09-01 18:15:16 得分 5
try to use pidof ProcessName instead!Top
12 楼pacman2000(pacman)(影子传说)回复于 2004-09-01 18:19:15 得分 5
呵呵。。。 老猫好像不在国内的样子。。。Top
13 楼lifeixiao(李飞笑)回复于 2004-09-02 12:41:51 得分 5
ps -ef|grep program_cmdTop
14 楼dragonhux(dragon(清水))回复于 2004-09-02 13:34:34 得分 5
老猫给的答案很标准啊,为什么还没结贴?
ps也是通过读取proc文件系统来
获取计算机当前的运行信息
如:任务、进程、内存、CPU、硬件等等。Top




