百分求助---Linux下,已知启动进程的命令名,如何判断该进程是否还存在

cuijixin 2008-07-14 09:46:19
如题,我要用c写一个函数,输入的参数是写在命令行的启动命令,比如./drmagent中的drmagent,函数执行的结果是要判断出drmagent这个进程是否还在跑,如果down了,就调用drmagent的启动脚本,重启这个进程。请大家给予帮助
...全文
560 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
e_sharp 2008-07-14
  • 打赏
  • 举报
回复
shell文件 Monitor,内容
#!/bin/sh
while [1]
do
//取进程数目,具体查一下ps命令
//grep -w 'drmagent' 严格配置名字是'drmagent'的进程
//grep -v grep 去掉本条语句 "ps -ef ¦ grep -w 'drmagent' ¦ grep -v grep ¦ wc -l "
//wc -l 统计行数
PROCESSNUM = ps -ef ¦ grep -w 'drmagent' ¦ grep -v grep ¦ wc -l
echo $PROCESSNUM

if [ $PROCESSNUM -lt 1 ]; then // -lt 小于
./启动脚本
fi
done


执行./Monitor 就可以了。


如果还有不明白的,分别google ps,grep,wc,shell if
cuijixin 2008-07-14
  • 打赏
  • 举报
回复
您好,能不能解释一下啊,我是菜鸟,看不太懂啊
e_sharp 2008-07-14
  • 打赏
  • 举报
回复
用shell方便

while [1]
do
PROCESSNUM = ps -ef | grep -w 'drmagent' | grep -v grep | wc -l
echo $PROCESSNUM

if [ $PROCESSNUM -lt 1 ]; then
./启动脚本
fi
done
偶像罗斯福 2008-07-14
  • 打赏
  • 举报
回复

int detect_process(char * process_name)
{
FILE *ptr;
char buff[512];
char ps[128];

sprintf(ps,"ps -e | grep -c ' %s$'",process_name);

strcpy(buff,"ABNORMAL");
if((ptr=popen(ps, "r")) != NULL)
{
while (fgets(buff, 512, ptr) != NULL)
{
if(atoi(buff)>=2)
{
pclose(ptr);
return CONFLICT;
}
}
}
if(strcmp(buff,"ABNORMAL")==0) /*ps command error*/
return ERROR;
pclose(ptr);
return NOERROR;
}
sukyin 2008-07-14
  • 打赏
  • 举报
回复
或者调用系统命令 ps -ef |grep XXX >aa

然后读aa看是不是有。不过这个也不是很好。

不知道《UNIX环境高级编程》里面有没有好办法。
hai040 2008-07-14
  • 打赏
  • 举报
回复
写shell,函数里调用
这方法不是很好
Wolf0403 2008-07-14
  • 打赏
  • 举报
回复
为什么要求 C/C++?
遍历 /proc/*/cmdline 文件,解析第一个到 '\0' 的字符串,包含的就是进程名;或者 /proc/*/exe 链接指向的是执行文件
cuijixin 2008-07-14
  • 打赏
  • 举报
回复
多谢大家的指导,单位要求我们做一个监测程序,来监测某些特定的服务,比如节目调度服务等,能及时发现调度服务宕掉或者变成僵尸进程,并进行重启,最大限度地减小对外不能提供服务的时间,要求是要用c/c++来做,我也没办法啊
逸学堂 2008-07-14
  • 打赏
  • 举报
回复
写shell是最好的办法
Wolf0403 2008-07-14
  • 打赏
  • 举报
回复
[Quote=Master Foo from "Rootless Root":]
Unix传统上认为,一行shell脚本胜过万行C程序
[/Quote]
Wolf0403 2008-07-14
  • 打赏
  • 举报
回复
./drmagent >/dev/null 2>&1
PID=$!
while kill -0 "$PID"; do
sleep
done
# proc died. restart here.
执假以为真 2008-07-14
  • 打赏
  • 举报
回复
楼主要写Linux下的病毒?
man就可以了,不用google

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧