자신의 process 이름 얻어오는 함수 좀 ^^

ninakhlee의 이미지

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);
superkkt의 이미지

좀 다른 방법이지만 그냥 argv[0]을 사용하면 간단하지 않은가요?

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

purewell의 이미지

getpid()로 pid 얻어서 /proc를 뒤지는 것도 한 방법 아닐까요?
_____________________________
언제나 맑고픈 샘이가...
http://yubink.com - 강아지 필요하세요?
http://purewell.biz - 헙!!

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

sangwoo의 이미지

이럴때 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.

sangwoo의 이미지

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.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.