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> 59dba6721SSasha Levin 69dba6721SSasha Levin #include <stdio.h> 79dba6721SSasha Levin #include <string.h> 89dba6721SSasha Levin #include <signal.h> 91b1577dcSSasha Levin #include <fcntl.h> 101b1577dcSSasha Levin 111b1577dcSSasha Levin #define PROCESS_NAME "kvm" 129dba6721SSasha Levin 13*886af5f2SLiming Wang static int print_guest(const char *name, int pid) 149dba6721SSasha Levin { 151b1577dcSSasha Levin char proc_name[PATH_MAX]; 16ebc49f06SSasha Levin char *comm = NULL; 17ebc49f06SSasha Levin FILE *fd; 181b1577dcSSasha Levin 19ebc49f06SSasha Levin sprintf(proc_name, "/proc/%d/stat", pid); 20ebc49f06SSasha Levin fd = fopen(proc_name, "r"); 21ebc49f06SSasha Levin if (fd == NULL) 221b1577dcSSasha Levin goto cleanup; 23ebc49f06SSasha Levin if (fscanf(fd, "%*u (%as)", &comm) == 0) 241b1577dcSSasha Levin goto cleanup; 251b1577dcSSasha Levin if (strncmp(comm, PROCESS_NAME, strlen(PROCESS_NAME))) 261b1577dcSSasha Levin goto cleanup; 271b1577dcSSasha Levin 289dba6721SSasha Levin printf("%s (PID: %d)\n", name, pid); 291b1577dcSSasha Levin 30ebc49f06SSasha Levin free(comm); 31ebc49f06SSasha Levin 32ebc49f06SSasha Levin fclose(fd); 331a0ef251SSasha Levin 34*886af5f2SLiming Wang return 0; 351b1577dcSSasha Levin 361b1577dcSSasha Levin cleanup: 37ebc49f06SSasha Levin if (fd) 38ebc49f06SSasha Levin fclose(fd); 39ebc49f06SSasha Levin if (comm) 40ebc49f06SSasha Levin free(comm); 41ebc49f06SSasha Levin 421b1577dcSSasha Levin kvm__remove_pidfile(name); 43*886af5f2SLiming Wang return 0; 449dba6721SSasha Levin } 459dba6721SSasha Levin 469dba6721SSasha Levin int kvm_cmd_list(int argc, const char **argv, const char *prefix) 479dba6721SSasha Levin { 48*886af5f2SLiming Wang return kvm__enumerate_instances(print_guest); 499dba6721SSasha Levin } 50