xref: /kvmtool/builtin-list.c (revision 1b1577dc9059a1627e5d7c44e08adc940bfe9078)
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