免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9308 | 回复: 11

查询用户下某一进程是否存在 [复制链接]

论坛徽章:
0
发表于 2009-10-16 10:39 |显示全部楼层
20可用积分
环境:unix/linux + c
请教:某一进程A为常驻进程,需要进程B去检测查询A在当前用户下是否仍然在运行。进程B应该如何写。
我考虑过用poen + "ps -ef",通过用户名和进程名来查找该进程,并取得进程号来确定该进程是否存在。
但测试过程中突然发现linux下,当用户名过长时,将以用户id来替代用户名。
如:某用户1234,用户id为511,进程A存在,则
用户名 进程id     父进程id                                            进程名
1234  21769     1              0 10:05 ?        00:00:01   A
如:某用户123456789, 用户id为512,进程A存在,则
用户id 进程id     父进程id                                            进程名
512    21769     1              0 10:05 ?        00:00:01   A

由于很难界定不同系统下什么情况用用户id,什么情况用用户名,所以通过用户名来查找进程方法难以实现,请教达人有没有其它办法实现该功能。

最佳答案

查看完整内容

呵呵 大姐都误解意思了...ps -U指定用户名不行?

论坛徽章:
0
发表于 2009-10-16 10:39 |显示全部楼层
呵呵 大姐都误解意思了...
ps -U指定用户名不行?

论坛徽章:
0
发表于 2009-10-16 11:16 |显示全部楼层
那你就再根据ID查下/etc/passwd

论坛徽章:
0
发表于 2009-10-16 11:39 |显示全部楼层
无法确定ps -ef后的第一个字段是用户名还是id

论坛徽章:
0
发表于 2009-10-16 11:52 |显示全部楼层
man  man下面两个函数应该可以解决你的问题
getlogin()
getpwuid(getuid())

论坛徽章:
0
发表于 2009-10-16 12:02 |显示全部楼层
刚又man了下ps
不知道这样是不是可以解决你的问题

  1. ps -C syslogd  -o pid=,user=,uid=
复制代码

用户名和uid都输出了

论坛徽章:
0
发表于 2009-10-16 12:33 |显示全部楼层
我觉得这个问题,用ps加参数-u username 肯定可以解决的。

但是,我认为并不是很好的方法。做服务程序时,用ps来检测并不很好。理想的做法,不如让服务程序启动一个Unix socket,然后由负责检测的时候,定时发送keepalive包,服务程序正常时,返回keepalive-response包。什么时候返回不了,监视程序应根据用户需要,做相应的动作。比如,立即重启服务程序。

论坛徽章:
0
发表于 2009-10-16 12:56 |显示全部楼层
lockfile.....

论坛徽章:
0
发表于 2009-10-16 19:45 |显示全部楼层
我的建议:
进程A如果你可控的话,可以让进程将自己的pid写到某个进程B可以访问的文件中,进程B读取该文件取得进程A的pid,然后去/proc/下去看,是否有/proc/A_pid,若有进程A存在,否则不存在。

论坛徽章:
0
发表于 2009-10-16 19:54 |显示全部楼层
另外,你还可以使用
naihe2010兄 提出的进程A向进程B定时发心跳包的方法,来确定进程A是否存在。
前提同样是进程A你是可控的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP