자신의 process 이름 얻어오는 함수 좀 ^^
글쓴이: ninakhlee / 작성시간: 목, 2006/04/13 - 1:36오후
FreeBSD4.4 사용하고 있는데요.
현재 실행되어 있는 자신의 process의 이름을 구하고 싶은데..
잘 안되네요..
솔라리스같은 경우에는 아래와 같이 할 수 있잖아요.
근데 FreeBSD에서 저렇게 하려고 하면 우선 psinfo_t부터 없다고 나오네요.
FreeBSD는 프로세스 정보 얻어오는 구조체가 다른가요?
알려주세요.. ^^
struct psinfo_t pinfo;
sprintf (procdir, "/proc/%d/status", getpid());
fd = open (procdir, O_RDONLY);
read(fd, (void *)&pinfo, sizeof(pinfo));
printf ("process name is %s\n", pinfo.pr_fname);Forums:


좀 다른 방법이지만
좀 다른 방법이지만 그냥 argv[0]을 사용하면 간단하지 않은가요?
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
getpid()로 pid 얻어서
getpid()로 pid 얻어서 /proc를 뒤지는 것도 한 방법 아닐까요?
_____________________________
언제나 맑고픈 샘이가...
http://yubink.com - 강아지 필요하세요?
http://purewell.biz - 헙!!
_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz
이럴때 top(3)의
이럴때 top(3)의 소스를 보면 좋겠죠 :-)
FreeBSD 6.X에서는 kvm_getprocs() 로부터 얻어지는 kinfo_proc 스트럭쳐의 ki_comm 멤버 변수가 아마 command name일 겁니다. 매뉴얼 페이지를 보세요!
FreeBSD는 대부분 /proc을 사용하지 않는답니다~ :-) 보안이나 기타 등등 때문에..
----
Let's shut up and code.
----
Let's shut up and code.
FreeBSD 6.0 에서
FreeBSD 6.0 에서 테스트했습니다. command name을 printf로 출력하는 예입니다.
#include <sys/param.h> #include <sys/types.h> #include <sys/sysctl.h> #include <sys/user.h> #include <err.h> #include <fcntl.h> #include <kvm.h> #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { int pcnt; kvm_t *kd; pid_t pid; struct kinfo_proc *p; kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open"); if (kd == NULL) err(1, "Couldn't open kvm"); pid = getpid(); p = kvm_getprocs(kd, KERN_PROC_PID, pid, &pcnt); if (p == NULL) err(1, "Couldn't get proc info via kvm"); printf("%s\n", p->ki_comm); return (0); }----
Let's shut up and code.
----
Let's shut up and code.
댓글 달기