19dba6721SSasha Levin #include <kvm/util.h> 29dba6721SSasha Levin #include <kvm/kvm-cmd.h> 39dba6721SSasha Levin #include <kvm/kvm-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> 9*1b1577dcSSasha Levin #include <fcntl.h> 10*1b1577dcSSasha Levin 11*1b1577dcSSasha Levin #define PROCESS_NAME "kvm" 129dba6721SSasha Levin 139dba6721SSasha Levin static void print_guest(const char *name, int pid) 149dba6721SSasha Levin { 15*1b1577dcSSasha Levin char proc_name[PATH_MAX]; 16*1b1577dcSSasha Levin char comm[sizeof(PROCESS_NAME)]; 17*1b1577dcSSasha Levin int fd; 18*1b1577dcSSasha Levin 19*1b1577dcSSasha Levin sprintf(proc_name, "/proc/%d/comm", pid); 20*1b1577dcSSasha Levin fd = open(proc_name, O_RDONLY); 21*1b1577dcSSasha Levin if (fd <= 0) 22*1b1577dcSSasha Levin goto cleanup; 23*1b1577dcSSasha Levin if (read(fd, comm, sizeof(PROCESS_NAME)) == 0) 24*1b1577dcSSasha Levin goto cleanup; 25*1b1577dcSSasha Levin if (strncmp(comm, PROCESS_NAME, strlen(PROCESS_NAME))) 26*1b1577dcSSasha Levin goto cleanup; 27*1b1577dcSSasha Levin 289dba6721SSasha Levin printf("%s (PID: %d)\n", name, pid); 29*1b1577dcSSasha Levin 30*1b1577dcSSasha Levin return; 31*1b1577dcSSasha Levin 32*1b1577dcSSasha Levin cleanup: 33*1b1577dcSSasha Levin kvm__remove_pidfile(name); 349dba6721SSasha Levin } 359dba6721SSasha Levin 369dba6721SSasha Levin int kvm_cmd_list(int argc, const char **argv, const char *prefix) 379dba6721SSasha Levin { 389dba6721SSasha Levin kvm__enumerate_instances(print_guest); 399dba6721SSasha Levin 409dba6721SSasha Levin return 0; 419dba6721SSasha Levin } 42