⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hr_swrun.c

📁 ucd-snmp源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
    DEBUGMSG(("host/hr_swrun","\n"));    return LowPid;}	/*********************	 *	 *  System specific implementation functions	 *	 *********************/u_char *var_hrswrun(struct variable *vp,	    oid *name,	    size_t *length,	    int exact,	    size_t *var_len,	    WriteMethod **write_method){    int pid=0;    static char string[256];#ifdef HAVE_SYS_PSTAT_H    struct pst_status proc_buf;#elif defined(solaris2)#if _SLASH_PROC_METHOD_    static psinfo_t psinfo;    static psinfo_t *proc_buf;    int procfd;    char procfn[sizeof "/proc/00000/psinfo"];#else    static struct proc *proc_buf;    char *cp1;#endif	/* _SLASH_PROC_METHOD_ */    static time_t when = 0;    time_t now;    static int oldpid = -1;#endif#if HAVE_KVM_GETPROCS    char **argv;#endif#ifdef linux    FILE *fp;    char buf[256];    int i;#endif    char *cp;    if ( vp->magic == HRSWRUN_OSINDEX ) {        if (header_hrswrun(vp, name, length, exact, var_len, write_method) == MATCH_FAILED )	    return NULL;    }    else {                pid = header_hrswrunEntry(vp, name, length, exact, var_len, write_method);        if ( pid == MATCH_FAILED )	    return NULL;    }#ifdef HAVE_SYS_PSTAT_H    if (pstat_getproc( &proc_buf, sizeof(struct pst_status), 0, pid ) == -1)	return NULL;#elif defined(solaris2)    time(&now);    if (pid == oldpid) {	if (now != when) oldpid = -1;    }    if (oldpid != pid || proc_buf == NULL) {#if _SLASH_PROC_METHOD_	proc_buf = &psinfo;	sprintf(procfn, "/proc/%.5d/psinfo", pid);	if ((procfd = open(procfn, O_RDONLY)) != -1) {		if (read(procfd, proc_buf, sizeof(*proc_buf)) != sizeof(*proc_buf)) abort();		close(procfd);	} else		proc_buf = NULL;#else	if (kd == NULL) return NULL;	if ((proc_buf = kvm_getproc(kd, pid)) == NULL) return NULL;#endif	oldpid = pid;	when = now;    }#endif    switch (vp->magic){	case HRSWRUN_OSINDEX:#if NO_DUMMY_VALUES		return NULL;#else	    long_return = 1;		/* Probably! */	    return (u_char *)&long_return;#endif	case HRSWRUN_INDEX:	    long_return = pid;	    return (u_char *)&long_return;	case HRSWRUN_NAME:#ifdef HAVE_SYS_PSTAT_H	    sprintf(string, "%s", proc_buf.pst_cmd);	    cp = strchr( string, ' ');	    if ( cp != NULL )		*cp = '\0';#elif defined(dynix)	    sprintf(string, "%s", lowpsinfo.pr_fname);	    cp = strchr( string, ' ');	    if ( cp != NULL )		*cp = '\0';#elif defined(solaris2)#if _SLASH_PROC_METHOD_	    if (proc_buf)		    strcpy(string, proc_buf->pr_fname);	    else		    strcpy(string, "<exited>");#else	    strcpy(string, proc_buf->p_user.u_comm);#endif#elif HAVE_KVM_GETPROCS            strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);#elif defined(linux)	    sprintf( string, "/proc/%d/status", pid );	    if ((fp = fopen( string, "r")) == NULL) return NULL;	    fgets( buf, sizeof(buf), fp );	/* Name: process name */	    cp = buf;	    while ( *cp != ':' )		++cp;	    ++cp;	    while ( isspace( *cp ))		++cp;	    strcpy( string, cp );            fclose(fp);#elif defined(cygwin)	    if (lowproc.process_state & (PID_ZOMBIE | PID_EXITED))		strcpy(string, "<defunct>");	    else if (lowproc.ppid) {		cygwin_conv_to_posix_path(lowproc.progname, string);		cp = strrchr(string, '/');		if (cp) strcpy(string, cp+1);	    }	    else if (query == CW_GETPINFO_FULL) {		DWORD n = lowproc.dwProcessId & 0xffff;		HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,				       FALSE, n);		if (h) {		    HMODULE hm[1000];		    if (!myEnumProcessModules(h, hm, sizeof hm, &n)) {			snmp_log(LOG_DEBUG, "no module handle for %lu\n", n);			n = 0;		    }		    if (n && myGetModuleFileNameEx(h, hm[0], string, sizeof string)) {			cp = strrchr(string, '\\');			if (cp) strcpy(string, cp+1);		    }		    else			strcpy(string, "*** unknown");		    CloseHandle(h);		}		else {		    snmp_log(LOG_INFO, "no process handle for %lu\n", n);		    strcpy(string, "** unknown");		}	    }	    else		strcpy(string, "* unknown");	    cp = strchr(string, '\0') - 4;	    if (cp > string && strcasecmp(cp, ".exe") == 0)		*cp = '\0';#else#if NO_DUMMY_VALUES	    return NULL;#endif	    sprintf(string, "process name");#endif	    *var_len = strlen(string);	    /* remove trailing newline */	    if (*var_len) {	        cp = string + *var_len -1;	        if (*cp == '\n')	            --(*var_len);	    }	    return (u_char *) string;	case HRSWRUN_ID:            *var_len = nullOidLen;	    return (u_char *) nullOid;	case HRSWRUN_PATH:#ifdef HAVE_SYS_PSTAT_H		/* Path not available - use argv[0] */	    sprintf(string, "%s", proc_buf.pst_cmd);	    cp = strchr( string, ' ');	    if ( cp != NULL )		*cp = '\0';#elif defined(dynix)		/* Path not available - use argv[0] */	    sprintf(string, "%s", lowpsinfo.pr_psargs);	    cp = strchr( string, ' ');	    if ( cp != NULL )		*cp = '\0';#elif defined(solaris2)#ifdef _SLASH_PROC_METHOD_	    if (proc_buf)	        strcpy(string, proc_buf->pr_psargs);	    else		sprintf(string, "<exited>");	    cp = strchr(string, ' ');	    if (cp) *cp = 0;#else	    cp = proc_buf->p_user.u_psargs;	    cp1 = string;	    while (*cp && *cp != ' ') *cp1++ = *cp++;	    *cp1 = 0;#endif#elif HAVE_KVM_GETPROCS            strcpy(string, proc_table[LowProcIndex].kp_proc.p_comm);#elif defined(linux)	    sprintf( string, "/proc/%d/cmdline", pid );	    if ((fp = fopen( string, "r")) == NULL) return NULL;	    if (fgets( buf, sizeof(buf)-1, fp )) /* argv[0] '\0' argv[1] '\0' .... */		strcpy( string, buf );	    else {		/* swapped out - no cmdline */	        fclose(fp);		sprintf( string, "/proc/%d/status", pid );		if ((fp = fopen( string, "r")) == NULL) return NULL;		fgets( buf, sizeof(buf), fp );	/* Name: process name */		cp = strchr(buf, ':');		++cp;		while ( isspace( *cp ))		    ++cp;		strcpy( string, cp );		cp = strchr(string, '\n');		if (cp) *cp = 0;	    }            fclose(fp);#elif defined(cygwin)	    if (lowproc.process_state & (PID_ZOMBIE | PID_EXITED))		strcpy(string, "<defunct>");	    else if (lowproc.ppid)		cygwin_conv_to_posix_path(lowproc.progname, string);	    else if (query == CW_GETPINFO_FULL) {		DWORD n = lowproc.dwProcessId & 0xFFFF;		HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,				       FALSE, n);		if (h) {		    HMODULE hm[1000];		    if (!myEnumProcessModules(h, hm, sizeof hm, &n))			n = 0;		    if (!n || !myGetModuleFileNameEx(h, hm[0], string, sizeof string))			strcpy(string, "*** unknown");		    CloseHandle(h);		}		else		    strcpy(string, "** unknown");	    }	    else		strcpy(string, "* unknown");#else#if NO_DUMMY_VALUES	    return NULL;#endif	    sprintf(string, "/bin/wombat");#endif	    *var_len = strlen(string);	    return (u_char *) string;	case HRSWRUN_PARAMS:#ifdef HAVE_SYS_PSTAT_H	    cp = strchr( proc_buf.pst_cmd, ' ');	    if ( cp != NULL ) {		cp++;		snprintf(string, HRSWRUN_PARAMS_MAX, "%s", cp);	    }	    else		string[0] = '\0';#elif defined(dynix)	    cp = strchr( lowpsinfo.pr_psargs, ' ');	    if ( cp != NULL ) {		cp++;		snprintf(string, HRSWRUN_PARAMS_MAX, "%s", cp);	    }	    else		string[0] = '\0';#elif defined(solaris2)#ifdef _SLASH_PROC_METHOD_	    if (proc_buf) {	        cp = strchr(proc_buf->pr_psargs, ' ');	        if (cp) strncpy(string, cp+1, HRSWRUN_PARAMS_MAX);	        else string[0] = 0;	    } else		string[0] = 0;#else	    cp = proc_buf->p_user.u_psargs;	    while (*cp && *cp != ' ') cp++;	    if (*cp == ' ') cp++;	    strncpy (string, cp, HRSWRUN_PARAMS_MAX);#endif#elif HAVE_KVM_GETPROCS	    string[0] = 0;	    argv = kvm_getargv(kd, proc_table+LowProcIndex, sizeof(string));	    if (argv) argv++;	    while (argv && *argv) {		int len = strlen(string);		if (string[0] != 0) strcat(string, " ");		strncpy(string+len, *argv, HRSWRUN_PARAMS_MAX-len);		string[127] = 0;		argv++;	    }#elif defined(linux)	    sprintf( string, "/proc/%d/cmdline", pid );	    if ((fp = fopen( string, "r")) == NULL) return NULL;	    memset( buf, 0, sizeof(buf) );                /* argv[0] '\0' argv[1] '\0' .... */	    if(!fgets( buf, sizeof(buf)-2, fp )) {                /* maybe be empty (even argv[0] is missing) */                string[0] = '\0';                *var_len = 0;                fclose(fp);                return string;            }            		/* Skip over argv[0] */	    cp = buf;	    while ( *cp )		++cp;	    ++cp;		/* Now join together separate arguments. */	    while ( 1 ) {	        while ( *cp )		    ++cp;		if ( *(cp+1) == '\0' )		    break;	/* '\0''\0' => End of command line */		*cp = ' ';	    }		    cp = buf;	    while ( *cp )		++cp;	    ++cp;	    strncpy( string, cp, HRSWRUN_PARAMS_MAX );            fclose(fp);#elif defined(cygwin)	    string[0] = 0;#else#if NO_DUMMY_VALUES	    return NULL;#endif	    sprintf(string, "-h -q -v");#endif	    string[HRSWRUN_PARAMS_MAX] = 0;	    *var_len = strlen(string);	    return (u_char *) string;	case HRSWRUN_TYPE:#ifdef PID_MAXSYS	    if ( pid < PID_MAXSYS )		long_return = 2;	/* operatingSystem */	    else#endif		long_return = 4;	/* application */	    return (u_char *)&long_return;	case HRSWRUN_STATUS:#if defined(cygwin)	    if (lowproc.process_state & PID_STOPPED)		long_return = 3; /* notRunnable */	    else if (lowproc.process_state & PID_ZOMBIE)		long_return = 4; /* invalid */	    else		long_return = 1; /* running */#elif !defined(linux)#if defined(hpux10) || defined(hpux11)	    switch ( proc_table[LowProcIndex].pst_stat ) {		case PS_STOP:	    		long_return = 3;	/* notRunnable */			break;		case PS_SLEEP:	    		long_return = 2;	/* runnable */			break;		case PS_RUN:	    		long_return = 1;	/* running */			break;		case PS_ZOMBIE:		case PS_IDLE:		case PS_OTHER:		default:	    		long_return = 4;	/* invalid */			break;	    }#else#if HAVE_KVM_GETPROCS	    switch ( proc_table[LowProcIndex].kp_proc.p_stat ) {#elif defined(dynix)	    switch ( lowpsinfo.pr_state ) {#elif defined(solaris2)#if _SLASH_PROC_METHOD_	    switch (proc_buf ? proc_buf->pr_lwp.pr_state : SIDL) {#else	    switch ( proc_buf->p_stat ) {#endif#else	    switch ( proc_table[LowProcIndex].p_stat ) {#endif		case SSTOP:	    		long_return = 3;	/* notRunnable */			break;		case 0:#ifdef SSWAP		case SSWAP:#endif#ifdef SSLEEP		case SSLEEP:#endif#ifdef SWAIT		case SWAIT:#endif	    		long_return = 2;	/* runnable */			break;#ifdef SACTIVE		case SACTIVE:#endif#ifdef SRUN		case SRUN:#endif#ifdef SONPROC		case SONPROC:#endif	    		long_return = 1;	/* running */			break;		case SIDL:		case SZOMB:		default:	    		long_return = 4;	/* invalid */			break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -