当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 如何在程序中判断另外一个进程是否正在运行?
帖子发表于 : 2009-09-08 14:29 

注册: 2006-01-02 0:37
帖子: 94
送出感谢: 0 次
接收感谢: 0 次
我现在正在做一个特定环境下的浏览器,在某些页面需要播放一些视频内容,
当用户点击一个视频链接的时候,我启动一个播放器对视频进行播放,但是现在遇到一个问题
,当用户对一个视频点击多次的时候,播放器也会启动多次,造成系统反应速度极慢。
我现在希望做的是,当用户不管点击多少次视频内容,始终只使用一个播放器进行播放,这里就需要判断该进程是否正在运行,
起初我写了一个shell进行判断,但是有局限性,因为设备的不同,shell的命令也不同,不易维护,希望有经验的开发人员给予帮助!

感谢!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何在程序中判断另外一个进程是否正在运行?
帖子发表于 : 2009-09-09 14:50 
头像

注册: 2009-07-07 19:52
帖子: 240
送出感谢: 0 次
接收感谢: 0 次
1. 比较笨的办法就是程序运行起来后,创建一个文件,第二个程序运行起来后,检查这个文件,发现存在,则退出,不存在则继续运行。程序退出后,删除该文件即可。
这个方法实现起来比较简单,但容易出问题。比如程序意外崩溃。

2. 可以按照 1 的思路,采用别的方法,比如互斥量等来实现。

3. 可以用 ps -aux | grep programname 来判断程序是否运行。

4. 查 /proc 下的进程名。例程如下 :

/*****************************************************************************
Function: int CheckProcess(char *processname);
Description: check the process.
*****************************************************************************/
int CheckProcess(char *processname)
{
int i, procfd, ret, n, num=0,pid = -1;
struct dirent **namelist;
char fname[100], buffer[100];
char *ptr = NULL;

n = scandir("/proc", &namelist, 0, alphasort);

for(i=0; i<n; i++){
// directly open the cmd if exist
sprintf(fname, "/proc/%s/cmdline", namelist[i]->d_name);
procfd = open(fname, O_RDONLY);
if(procfd > 0){
memset(buffer, 0, sizeof(buffer));
ret = read(procfd, buffer, sizeof(buffer) - 1);
close(procfd);
ptr = strstr(buffer, processname);
if(ret > 0 && ptr != NULL){
if (strlen(ptr) == strlen(processname)){
pid = atoi(namelist[i]->d_name);
num ++;
}
}
}
free(namelist[i]);
}
free(namelist);
return num > 0? num:0;
}


_________________
阿呆 : 天下第一呆!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译