xref: /kvmtool/builtin-list.c (revision 2a24f96d648d5a281ae506ca6125404d1edbe7f5)
19dba6721SSasha Levin #include <kvm/util.h>
29dba6721SSasha Levin #include <kvm/kvm-cmd.h>
3*2a24f96dSSasha 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 
301b1577dcSSasha Levin 	return;
311b1577dcSSasha Levin 
321b1577dcSSasha Levin cleanup:
331b1577dcSSasha 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