{"id":10795,"date":"2020-03-29T10:10:29","date_gmt":"2020-03-29T10:10:29","guid":{"rendered":"http:\/\/blog.bachi.net\/?p=10795"},"modified":"2020-03-29T10:26:03","modified_gmt":"2020-03-29T10:26:03","slug":"freebsd-kvm-kernel-virtual-memory-access","status":"publish","type":"post","link":"https:\/\/blog.bachi.net\/?p=10795","title":{"rendered":"FreeBSD KVM (Kernel Virtual Memory Access)"},"content":{"rendered":"<p><a href=\"https:\/\/svnweb.freebsd.org\/base\/release\/10.2.0\/bin\/pkill\/\">svnweb.freebsd.org\/base\/release\/10.2.0\/bin\/pkill\/<\/a><br \/>\n<a href=\"https:\/\/wiki.gnome.org\/Projects\/Tracker\">Tracker<\/a>, is a filesystem indexer, metadata storage system and search tool.<br \/>\n<a href=\"https:\/\/fossies.org\/linux\/tracker\/src\/tracker\/tracker-process.c\">fossies.org\/linux\/tracker\/src\/tracker\/tracker-process.c<\/a><\/p>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/26391097\/how-can-a-process-inquire-when-it-was-started\">How can a process inquire, when it was started?<\/a><br \/>\n<a href=\"https:\/\/github.com\/dnabre\/misc\/tree\/master\/proc_info\">github.com\/dnabre\/misc\/tree\/master\/proc_info<\/a>, Get time process started<br \/>\n<a href=\"https:\/\/github.com\/hishamhm\/htop\/blob\/master\/freebsd\/FreeBSDProcessList.c\">github.com\/hishamhm\/htop\/blob\/master\/freebsd\/FreeBSDProcessList.c<\/a><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;string.h&gt;\r\n#include &lt;unistd.h&gt;\r\n\r\n#include &lt;signal.h&gt;\r\n\r\n\/* _POSIX2_LINE_MAX *\/\r\n#include &lt;limits.h&gt;\r\n\r\n\/* kvm_openfiles(), kvm_getprocs() *\/\r\n#include &lt;kvm.h&gt;\r\n\r\n\/* errx() *\/\r\n#include &lt;err.h&gt;\r\n\r\n\/* _PATH_DEVNULL *\/\r\n#include &lt;paths.h&gt;\r\n\r\n\/* O_RDONLY *\/\r\n#include &lt;fcntl.h&gt;\r\n\r\n\/* KERN_PROC_PROC *\/\r\n#include &lt;sys\/sysctl.h&gt;\r\n\r\n\/* struct kinfo_proc *\/\r\n#include &lt;sys\/user.h&gt;\r\n\r\n#define STATUS_MATCH    0\r\n#define STATUS_NOMATCH  1\r\n#define STATUS_BADUSAGE 2\r\n#define STATUS_ERROR    3\r\n\r\nint\r\nmain(int argc, char **argv)\r\n{\r\n    int i;\r\n\r\n    \/* PID *\/\r\n    pid_t mypid;\r\n    pid_t pid;\r\n\r\n    \/* KVM openfiles() *\/\r\n    kvm_t      *kd;\r\n    const char *execf;\r\n    const char *coref;\r\n    char        buf&#x5B;_POSIX2_LINE_MAX];\r\n\r\n    \/* KVM getprocs() *\/\r\n    int                 nproc;\r\n    struct kinfo_proc  *plist;\r\n    struct kinfo_proc  *kp;\r\n\r\n    \/* KVM getargv() *\/\r\n    char **strv;\r\n\r\n    char *selected;\r\n\r\n    execf = NULL;\r\n    coref = _PATH_DEVNULL;\r\n\r\n    mypid = getpid();\r\n\r\n    \/*\r\n     * Retrieve the list of running processes from the kernel.\r\n     *\/\r\n    kd = kvm_openfiles(execf, coref, NULL, O_RDONLY, buf);\r\n    if (kd == NULL)\r\n        errx(STATUS_ERROR, &quot;Cannot open kernel files (%s)&quot;, buf);\r\n\r\n    \/*\r\n     * Use KERN_PROC_PROC instead of KERN_PROC_ALL, since we\r\n     * just want processes and not individual kernel threads.\r\n     *\/\r\n    plist = kvm_getprocs(kd, KERN_PROC_PROC, 0, &amp;nproc);\r\n    if (plist == NULL) {\r\n        errx(STATUS_ERROR, &quot;Cannot get process list (%s)&quot;,\r\n            kvm_geterr(kd));\r\n    }\r\n    printf(&quot;nproc=%d\\n&quot;, nproc);\r\n\r\n    \/*\r\n     * Allocate memory which will be used to keep track of the\r\n     * selection.\r\n     *\/\r\n    if ((selected = malloc(nproc)) == NULL) {\r\n        err(STATUS_ERROR, &quot;Cannot allocate memory for %d processes&quot;,\r\n            nproc);\r\n    }\r\n    memset(selected, 0, nproc);\r\n\r\n    \/*\r\n     * Take the appropriate action for each matched process, if any.\r\n     *\/\r\n    for (i = 0, kp = plist; i &lt; nproc; i++, kp++) {\r\n        printf(&quot;comm=%s tdname=%s wmesg=%s login=%s lockname=%s emul=%s loginclass=%s&quot;,\r\n            kp-&gt;ki_comm,\r\n            kp-&gt;ki_tdname,\r\n            kp-&gt;ki_wmesg,\r\n            kp-&gt;ki_login,\r\n            kp-&gt;ki_lockname,\r\n            kp-&gt;ki_emul,\r\n            kp-&gt;ki_loginclass);\r\n        if ((strv = kvm_getargv(kd, kp, 0)) != NULL) {\r\n            printf(&quot; argv=%s&quot;, strv&#x5B;0]);\r\n        }\r\n        printf(&quot;\\n&quot;);\r\n    }\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>svnweb.freebsd.org\/base\/release\/10.2.0\/bin\/pkill\/ Tracker, is a filesystem indexer, metadata storage system and search tool. fossies.org\/linux\/tracker\/src\/tracker\/tracker-process.c How can a process inquire, when it was started? github.com\/dnabre\/misc\/tree\/master\/proc_info, Get time process started github.com\/hishamhm\/htop\/blob\/master\/freebsd\/FreeBSDProcessList.c #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;unistd.h&gt; #include &lt;signal.h&gt; \/* _POSIX2_LINE_MAX *\/ #include &lt;limits.h&gt; \/* kvm_openfiles(), kvm_getprocs() *\/ #include &lt;kvm.h&gt; \/* errx() *\/ #include &lt;err.h&gt; \/* [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10795","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/10795","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10795"}],"version-history":[{"count":5,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/10795\/revisions"}],"predecessor-version":[{"id":10800,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/10795\/revisions\/10800"}],"wp:attachment":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}