19dba6721SSasha Levin #include <kvm/util.h> 29dba6721SSasha Levin #include <kvm/kvm-cmd.h> 32a24f96dSSasha Levin #include <kvm/builtin-list.h> 49dba6721SSasha Levin #include <kvm/kvm.h> 5*0725673aSSasha Levin #include <kvm/parse-options.h> 69dba6721SSasha Levin 79dba6721SSasha Levin #include <stdio.h> 89dba6721SSasha Levin #include <string.h> 99dba6721SSasha Levin #include <signal.h> 101b1577dcSSasha Levin #include <fcntl.h> 111b1577dcSSasha Levin 121b1577dcSSasha Levin #define PROCESS_NAME "kvm" 139dba6721SSasha Levin 14*0725673aSSasha Levin static const char * const list_usage[] = { 15*0725673aSSasha Levin "kvm list", 16*0725673aSSasha Levin NULL 17*0725673aSSasha Levin }; 18*0725673aSSasha Levin 19*0725673aSSasha Levin static const struct option list_options[] = { 20*0725673aSSasha Levin OPT_END() 21*0725673aSSasha Levin }; 22*0725673aSSasha Levin 23*0725673aSSasha Levin void kvm_list_help(void) 24*0725673aSSasha Levin { 25*0725673aSSasha Levin usage_with_options(list_usage, list_options); 26*0725673aSSasha Levin } 27*0725673aSSasha Levin 28886af5f2SLiming Wang static int print_guest(const char *name, int pid) 299dba6721SSasha Levin { 301b1577dcSSasha Levin char proc_name[PATH_MAX]; 31ebc49f06SSasha Levin char *comm = NULL; 32ebc49f06SSasha Levin FILE *fd; 331b1577dcSSasha Levin 34ebc49f06SSasha Levin sprintf(proc_name, "/proc/%d/stat", pid); 35ebc49f06SSasha Levin fd = fopen(proc_name, "r"); 36ebc49f06SSasha Levin if (fd == NULL) 371b1577dcSSasha Levin goto cleanup; 38ebc49f06SSasha Levin if (fscanf(fd, "%*u (%as)", &comm) == 0) 391b1577dcSSasha Levin goto cleanup; 401b1577dcSSasha Levin if (strncmp(comm, PROCESS_NAME, strlen(PROCESS_NAME))) 411b1577dcSSasha Levin goto cleanup; 421b1577dcSSasha Levin 438a09361dSPekka Enberg printf("%5d %s\n", pid, name); 441b1577dcSSasha Levin 45ebc49f06SSasha Levin free(comm); 46ebc49f06SSasha Levin 47ebc49f06SSasha Levin fclose(fd); 481a0ef251SSasha Levin 49886af5f2SLiming Wang return 0; 501b1577dcSSasha Levin 511b1577dcSSasha Levin cleanup: 52ebc49f06SSasha Levin if (fd) 53ebc49f06SSasha Levin fclose(fd); 54ebc49f06SSasha Levin if (comm) 55ebc49f06SSasha Levin free(comm); 56ebc49f06SSasha Levin 571b1577dcSSasha Levin kvm__remove_pidfile(name); 58886af5f2SLiming Wang return 0; 599dba6721SSasha Levin } 609dba6721SSasha Levin 619dba6721SSasha Levin int kvm_cmd_list(int argc, const char **argv, const char *prefix) 629dba6721SSasha Levin { 638a09361dSPekka Enberg printf(" PID GUEST\n"); 648a09361dSPekka Enberg 65886af5f2SLiming Wang return kvm__enumerate_instances(print_guest); 669dba6721SSasha Levin } 67