xref: /kvmtool/builtin-list.c (revision 1b1577dc9059a1627e5d7c44e08adc940bfe9078)
1 #include <kvm/util.h>
2 #include <kvm/kvm-cmd.h>
3 #include <kvm/kvm-list.h>
4 #include <kvm/kvm.h>
5 
6 #include <stdio.h>
7 #include <string.h>
8 #include <signal.h>
9 #include <fcntl.h>
10 
11 #define PROCESS_NAME "kvm"
12 
13 static void print_guest(const char *name, int pid)
14 {
15 	char proc_name[PATH_MAX];
16 	char comm[sizeof(PROCESS_NAME)];
17 	int fd;
18 
19 	sprintf(proc_name, "/proc/%d/comm", pid);
20 	fd = open(proc_name, O_RDONLY);
21 	if (fd <= 0)
22 		goto cleanup;
23 	if (read(fd, comm, sizeof(PROCESS_NAME)) == 0)
24 		goto cleanup;
25 	if (strncmp(comm, PROCESS_NAME, strlen(PROCESS_NAME)))
26 		goto cleanup;
27 
28 	printf("%s (PID: %d)\n", name, pid);
29 
30 	return;
31 
32 cleanup:
33 	kvm__remove_pidfile(name);
34 }
35 
36 int kvm_cmd_list(int argc, const char **argv, const char *prefix)
37 {
38 	kvm__enumerate_instances(print_guest);
39 
40 	return 0;
41 }
42