From 6dd238dcc138ced60a80cec81f7456340a808ab9 Mon Sep 17 00:00:00 2001 From: Alastair Poole Date: Tue, 21 Apr 2020 21:44:24 +0100 Subject: [PATCH] OpenBSD: Use process argument list. --- src/bin/process.c | 51 +++++++++++++++++++++++++++++++++-------------- src/bin/system.c | 1 + src/bin/ui.c | 2 +- 3 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/bin/process.c b/src/bin/process.c index fb75e72..5bc4a4e 100644 --- a/src/bin/process.c +++ b/src/bin/process.c @@ -332,8 +332,10 @@ proc_info_by_pid(int pid) { struct kinfo_proc *kp; kvm_t *kern; + char **args; char errbuf[_POSIX2_LINE_MAX]; int count, pagesize, pid_count; + Eina_Bool have_command = EINA_FALSE; kern = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf); if (!kern) return NULL; @@ -350,7 +352,6 @@ proc_info_by_pid(int pid) p->pid = kp->p_pid; p->uid = kp->p_uid; p->cpu_id = kp->p_cpuid; - snprintf(p->command, sizeof(p->command), "%s", kp->p_comm); p->state = _process_state_name(kp->p_stat); p->cpu_time = kp->p_uticks + kp->p_sticks + kp->p_iticks; p->mem_size = (kp->p_vm_tsize * pagesize) + (kp->p_vm_dsize * pagesize) + (kp->p_vm_ssize * pagesize); @@ -359,6 +360,17 @@ proc_info_by_pid(int pid) p->nice = kp->p_nice - NZERO; p->numthreads = -1; + if ((args = kvm_getargv(kern, kp, sizeof(p->command)-1))) + { + if (args[0]) + { + snprintf(p->command, sizeof(p->command), "%s", args[0]); + have_command = EINA_TRUE; + } + } + if (!have_command) + snprintf(p->command, sizeof(p->command), "%s", kp->p_comm); + kp = kvm_getprocs(kern, KERN_PROC_SHOW_THREADS, 0, sizeof(*kp), &pid_count); for (int i = 0; i < pid_count; i++) @@ -375,18 +387,18 @@ proc_info_by_pid(int pid) static Eina_List * _process_list_openbsd_get(void) { - struct kinfo_proc *kp; + struct kinfo_proc *kps, *kp; Proc_Info *p; char errbuf[4096]; kvm_t *kern; int pid_count, pagesize; - Eina_List *l, *list = NULL; + Eina_List *list = NULL; kern = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, errbuf); if (!kern) return NULL; - kp = kvm_getprocs(kern, KERN_PROC_ALL, 0, sizeof(*kp), &pid_count); - if (!kp) return NULL; + kps = kvm_getprocs(kern, KERN_PROC_ALL, 0, sizeof(*kps), &pid_count); + if (!kps) return NULL; pagesize = getpagesize(); @@ -395,20 +407,28 @@ _process_list_openbsd_get(void) p = calloc(1, sizeof(Proc_Info)); if (!p) return NULL; - p->pid = kp[i].p_pid; - p->uid = kp[i].p_uid; - p->cpu_id = kp[i].p_cpuid; - snprintf(p->command, sizeof(p->command), "%s", kp[i].p_comm); - p->state = _process_state_name(kp[i].p_stat); - p->cpu_time = kp[i].p_uticks + kp[i].p_sticks + kp[i].p_iticks; - p->mem_size = (kp[i].p_vm_tsize * pagesize) + (kp[i].p_vm_dsize * pagesize) + (kp[i].p_vm_ssize * pagesize); - p->mem_rss = kp[i].p_vm_rssize * pagesize; - p->priority = kp[i].p_priority - PZERO; - p->nice = kp[i].p_nice - NZERO; + kp = &kps[i]; + p->pid = kp->p_pid; + p->uid = kp->p_uid; + p->cpu_id = kp->p_cpuid; + p->state = _process_state_name(kp->p_stat); + p->cpu_time = kp->p_uticks + kp->p_sticks + kp->p_iticks; + p->mem_size = (kp->p_vm_tsize * pagesize) + (kp->p_vm_dsize * pagesize) + (kp->p_vm_ssize * pagesize); + p->mem_rss = kp->p_vm_rssize * pagesize; + p->priority = kp->p_priority - PZERO; + p->nice = kp->p_nice - NZERO; p->numthreads = -1; + + snprintf(p->command, sizeof(p->command), "%s", kp->p_comm); + list = eina_list_append(list, p); } + /* We don't need to count the threads for our usage in Evisum. + + If necessary this can be re-enabled. Our single process query is + sufficient. + kp = kvm_getprocs(kern, KERN_PROC_SHOW_THREADS, 0, sizeof(*kp), &pid_count); EINA_LIST_FOREACH(list, l, p) @@ -419,6 +439,7 @@ _process_list_openbsd_get(void) p->numthreads++; } } + */ kvm_close(kern); diff --git a/src/bin/system.c b/src/bin/system.c index 2352b63..d18fdb0 100644 --- a/src/bin/system.c +++ b/src/bin/system.c @@ -568,6 +568,7 @@ _memory_usage_get(meminfo_t *memory) struct uvmexp uvmexp; int nswap, rnswap; struct swapent *swdev = NULL; + (void) miblen; len = sizeof(memory->total); if (sysctl(mib, 2, &memory->total, &len, NULL, 0) == -1) diff --git a/src/bin/ui.c b/src/bin/ui.c index e431ef2..9e8b961 100644 --- a/src/bin/ui.c +++ b/src/bin/ui.c @@ -1912,7 +1912,7 @@ _ui_process_panel_add(Ui *ui) elm_box_pack_end(hbox, frame); label = elm_label_add(parent); - elm_object_text_set(label, "Name:"); + elm_object_text_set(label, "Command:"); evas_object_show(label); elm_table_pack(table, label, 0, 0, 1, 1);