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 139dba6721SSasha Levin static void print_guest(const char *name, int pid) 149dba6721SSasha Levin { 151b1577dcSSasha Levin char proc_name[PATH_MAX]; 161b1577dcSSasha Levin char comm[sizeof(PROCESS_NAME)]; 171b1577dcSSasha Levin int fd; 181b1577dcSSasha Levin 191b1577dcSSasha Levin sprintf(proc_name, "/proc/%d/comm", pid); 201b1577dcSSasha Levin fd = open(proc_name, O_RDONLY); 211b1577dcSSasha Levin if (fd <= 0) 221b1577dcSSasha Levin goto cleanup; 231b1577dcSSasha Levin if (read(fd, comm, sizeof(PROCESS_NAME)) == 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 30*1a0ef251SSasha Levin close(fd); 31*1a0ef251SSasha Levin 321b1577dcSSasha Levin return; 331b1577dcSSasha Levin 341b1577dcSSasha Levin cleanup: 351b1577dcSSasha Levin kvm__remove_pidfile(name); 369dba6721SSasha Levin } 379dba6721SSasha Levin 389dba6721SSasha Levin int kvm_cmd_list(int argc, const char **argv, const char *prefix) 399dba6721SSasha Levin { 409dba6721SSasha Levin kvm__enumerate_instances(print_guest); 419dba6721SSasha Levin 429dba6721SSasha Levin return 0; 439dba6721SSasha Levin } 44