免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: keanlee
打印 上一主题 下一主题

有没有系统调用可以判断某进程是否存在?  关闭 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-06-13 14:39 |只看该作者

有没有系统调用可以判断某进程是否存在?

下面的代码 执行时出现如下问题:当进程不存在时is_proc_exist里的line为1,好象是grep -v "grep"不起作用,请问是什么原因?
#include <stdio.h>;      /* FILE, sprintf, fgets, puts */
#include <stdlib.h>;     /* atoi, exit, EXIT_SUCCESS */
#include <string.h>;     /* strtok, strcmp */
#include <sys/types.h>;  /* pid_t */
#include <sys/wait.h>;   /* WIFEXITED, WEXITSTATUS */

bool is_proc_exist(char *filter)
{
        static char line[133], command[80], *linep, *token, *cmd;
        FILE *fp;
        int status;

        if (filter == NULL) return false;

        sprintf(command, "ps -ef |grep -v grep | grep %s | wc -l", filter); //ps -ef | grep "process" | grep -v "g
rep"
printf("%s\n", command);
        fp = popen(command, "r";

        if ((FILE *)0 == fp) return false;

        if ((char *)0 == fgets(line, sizeof line, fp))
        {
                pclose(fp);
                return false;
        }
printf("%s\n", line);

        if (atoi(line) >; 0)
        {
                return true;
        }
        else
        {
                return false;
        }
}

int main(int argc, char *argv[])
{
        if (is_proc_exist(argv[1]))
        printf("%s already run\n", argv[1]);
        else
        printf("%s not run\n", argv[1]);

        return 0;
}

论坛徽章:
0
22 [报告]
发表于 2005-06-13 15:08 |只看该作者

有没有系统调用可以判断某进程是否存在?

上面程序中多算了一个他本身的进程。执行命令中加上 grep -v "myprocess"去掉他就可以了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
23 [报告]
发表于 2005-06-13 15:10 |只看该作者

有没有系统调用可以判断某进程是否存在?

枪毙人验明正身当然得用身份证(外国人叫 ID)了,
不能因为你的名字和他相同就把你也杀了对不对?

论坛徽章:
0
24 [报告]
发表于 2005-06-13 16:49 |只看该作者

有没有系统调用可以判断某进程是否存在?

原帖由 "flw" 发表:
枪毙人验明正身当然得用身份证(外国人叫 ID)了,
不能因为你的名字和他相同就把你也杀了对不对?


呵呵,不过,中国居然有很多不同的人具有相同身份证号的情况,我见过几个。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
25 [报告]
发表于 2005-06-13 16:52 |只看该作者

有没有系统调用可以判断某进程是否存在?

[quote]原帖由 "FH"]呵呵,不过,中国居然有很多不同的人具有相同身份证号的情况,我见过几个。[/quote 发表:

这个……     
是真的吗?
身份证号里面编码了省份地区街道生日,难道?这两人的这些参数都相同?

论坛徽章:
0
26 [报告]
发表于 2005-06-13 17:32 |只看该作者

有没有系统调用可以判断某进程是否存在?

确实有相同的
我也见过
不知道公安局怎么管的

论坛徽章:
0
27 [报告]
发表于 2005-06-14 12:08 |只看该作者

有没有系统调用可以判断某进程是否存在?

static char *GetBaseCommand(char *path)
{
        char *base;
       
        base = strrchr(path,'/');
        if(base==NULL)
                return path;
        base ++;
        return base;
}


/* 统计已经运行的ipagentSendChild进程数 */
int DetectProg()
{
    FILE *fp;
    int n = 0;
    char szBuf[100 + 1];
    char *cmd;

    memset( szBuf, 0, sizeof( szBuf ) );

    fp = popen( "ps -e | grep ipagentSendChild | awk '{ print $4 }' ", "r" );
    if( fp == NULL )
    {
        ErrLog( AP_IP_LOG_BATCH, __FILE__, __LINE__, "popen failed" );
        return -1;
    }
    while( fgets( szBuf, 100, fp ) != NULL  )
    {
        TrimString( szBuf );
        cmd = GetBaseCommand( szBuf );
        if( strcmp( cmd, "ipagentSendChild" ) == 0 )
        {
            n = n + 1;
        }
        memset( szBuf, 0, sizeof( szBuf ) );
    }
    pclose( fp );

/*
    PrintLog( stdout, "DetectProg函数:ipagentSendChild进程个数[%d]", n );
*/
    return n;
}

论坛徽章:
0
28 [报告]
发表于 2005-06-14 16:10 |只看该作者

有没有系统调用可以判断某进程是否存在?

不同的系统有不同的判断方法。
如果要通用,就只能是ps。

论坛徽章:
0
29 [报告]
发表于 2005-06-14 17:35 |只看该作者

有没有系统调用可以判断某进程是否存在?

肯定是假身份证了
随便检了个身份证复印件,就作呗
所以身份证复印件不可以,随便乱扔

论坛徽章:
0
30 [报告]
发表于 2005-06-14 17:36 |只看该作者

有没有系统调用可以判断某进程是否存在?

内容咋就引申到身份证上去了?
-_-!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP