LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1139|回复: 6

C程序中如何杀死进程以及如何在循环中等待

[复制链接]
发表于 2006-9-10 11:12:46 | 显示全部楼层 |阅读模式
有两个问题请教大家

1、我希望自己的程序运行时首先检查系统中是否已经有该程序的进程了,如果有,就杀掉。这个如何实现?

2、程序中要等待某一变量变为1才继续往下进行,该变量变为1的时间是不确定的。我目前想到的方法是用一个空的while循环,如下

while(!该变量)
{}
end

这样会不会造成等待的时候系统资源全部耗在这儿了?有什么方法可以使该循环不占用资源吗?或者有其他的实现方法?
发表于 2006-9-10 14:18:58 | 显示全部楼层
1.这个问题比较容易处理,你可以写一个函数扫描/proc目录,找出目录名第一个字符>'0'&&<'9'的这些个目录,这些目录名就是系统中当前存在的进程号。然后查看该目录中的一个叫做exe的符号链接所指向的文件的名字,这样你就可以判断系统中是否已经有该程序的进程了,然后kill它吧。
2.这个问题最好不要(也可能是不能)从变量本省的改变入手(希望我没说错),而应该从引起变量改变的地方入手(也许你的情况是在另一个线程中操作这个变量),比如在改变这个变量后,在让它发送一个信号,如:
  1. i = ***;
  2. if(i ==1);
  3. kill(***,***);
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-11 10:34:58 | 显示全部楼层
1、这个得有root权限才可以。可不可以在程序中调用bash语句 ps aux,找到进程号然后杀掉?如何调用呢?

2、我现在用一个timeout函数,隔一段时间检查一下变量的值。
回复 支持 反对

使用道具 举报

发表于 2006-9-11 10:50:41 | 显示全部楼层
1. ps也是去读/proc目录,真要这样你可以使用popen函数来调ps,然后分析输出结果
2. 如果你的精度要求不高的话,这样未尝不可,但是肯定会有延迟,因为可能你在这次检查刚刚结束它就变成1了,你却要等到下一次检查才能发现
回复 支持 反对

使用道具 举报

发表于 2006-9-11 13:37:19 | 显示全部楼层
第二个问题尝试用信号量类的方法解决应该更好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-11 14:36:42 | 显示全部楼层
Post by Arthur.Echo

2.这个问题最好不要(也可能是不能)从变量本省的改变入手(希望我没说错),而应该从引起变量改变的地方入手(也许你的情况是在另一个线程中操作这个变量),比如在改变这个变量后,在让它发送一个信号,如:
  1. i = ***;
  2. if(i ==1);
  3. kill(***,***);
复制代码


引起变量改变的地方是我程序不能控制的。我得情况是这样,我想判断某个目录下是否生成了指定文件,该文件是由外部程序生成的。只有有了该文件,我的程序才继续往下走。

你提到的方法对于这种情况应该不太方便了。我前面提到的timeout的方法确实有延迟的现象。有更好的方法吗?
回复 支持 反对

使用道具 举报

发表于 2006-9-11 17:31:39 | 显示全部楼层
Post by mwmb2
引起变量改变的地方是我程序不能控制的。我得情况是这样,我想判断某个目录下是否生成了指定文件,该文件是由外部程序生成的。只有有了该文件,我的程序才继续往下走。

你提到的方法对于这种情况应该不太方便了。我前面提到的timeout的方法确实有延迟的现象。有更好的方法吗?
使用dnotify/inotify/或者fcntl来监视目录阿,怎么能这样做呢,你的出发点错了
你man 一下fcntl,在man里找F_NOTIFY命令看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表