xref: /kvmtool/builtin-list.c (revision 1a0ef251621013eda07eec317a52044ae4c8ef78)
1 #include <kvm/util.h>
2 #include <kvm/kvm-cmd.h>
3 #include <kvm/builtin-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 	close(fd);
31 
32 	return;
33 
34 cleanup:
35 	kvm__remove_pidfile(name);
36 }
37 
38 int kvm_cmd_list(int argc, const char **argv, const char *prefix)
39 {
40 	kvm__enumerate_instances(print_guest);
41 
42 	return 0;
43 }
44