当前位置: 技术问答>linux和unix
求教个关于ps ,grep相关的简单问题
来源: 互联网 发布时间:2016-03-09
本文导语: 不懂LINUX,需要写个C语言的代码去监视某个进程(知道进程名称),如果消失就重启 这是抄录的一段代码(偶自己作了一点点修改),根据进程名称,获取该进程的PID,如果获取PID失败就启动程序 现在的问题是,代...
不懂LINUX,需要写个C语言的代码去监视某个进程(知道进程名称),如果消失就重启
这是抄录的一段代码(偶自己作了一点点修改),根据进程名称,获取该进程的PID,如果获取PID失败就启动程序
现在的问题是,代码是实现查找包含进程名称的最后一个进程的PID,而我需要的则是完全匹配进程名,grep这里如何实现完全匹配,而不是包含该进程名称....
sprintf(szCmd, "ps -eo ppid,pid,fname |grep %s |awk '{if ($1==1){print $2}}'", process_name);
if ((pFile = popen(szCmd, "r")) == NULL)
{
return -1;
}
while (fgets(szBuf, sizeof(szBuf), pFile))
{
sscanf(szBuf, "%d", &pid);
break;
}
pclose(pFile);
return pid;
另外如果我需要重启的程序,有可能要启动多个进程,用system("/abcd/myobj arg")启动该程序到最后要出错
但是我在控制台下输入
cd /abcd
./myobj arg
这样子启动,程序不会出错
对于这种情况,我该怎么shelll这个程序?
麻烦大家帮我解决下问题,谢谢,潜水CSDN多年,就分多,呵呵,高分求教,希望重金之下必有勇夫 ^_^
这是抄录的一段代码(偶自己作了一点点修改),根据进程名称,获取该进程的PID,如果获取PID失败就启动程序
现在的问题是,代码是实现查找包含进程名称的最后一个进程的PID,而我需要的则是完全匹配进程名,grep这里如何实现完全匹配,而不是包含该进程名称....
sprintf(szCmd, "ps -eo ppid,pid,fname |grep %s |awk '{if ($1==1){print $2}}'", process_name);
if ((pFile = popen(szCmd, "r")) == NULL)
{
return -1;
}
while (fgets(szBuf, sizeof(szBuf), pFile))
{
sscanf(szBuf, "%d", &pid);
break;
}
pclose(pFile);
return pid;
另外如果我需要重启的程序,有可能要启动多个进程,用system("/abcd/myobj arg")启动该程序到最后要出错
但是我在控制台下输入
cd /abcd
./myobj arg
这样子启动,程序不会出错
对于这种情况,我该怎么shelll这个程序?
麻烦大家帮我解决下问题,谢谢,潜水CSDN多年,就分多,呵呵,高分求教,希望重金之下必有勇夫 ^_^
|
sprintf(szCmd, "ps -eo ppid,pid,fname ¦grep " %s$" ¦awk '{if ($1==1){print $2}}'", process_name);
几点注意:grep字符串用引号括起来,最前面是一个空格,最后面试一个$,表示行结束
几点注意:grep字符串用引号括起来,最前面是一个空格,最后面试一个$,表示行结束
|
system("/abcd/myobj arg")加上后台运行应该就可以了
|
通过扫描/proc/数字目录下的cmdline文件,可以获得进程名称
|
楼主还不如直接用shell+awk解决呢!
用crontab做个定时任务就搞定了
类似看门狗的功能
或者直接用软件看门狗
用crontab做个定时任务就搞定了
类似看门狗的功能
或者直接用软件看门狗