xref: /kvmtool/builtin-list.c (revision ebc49f06b0078f3a0e09a06bc23a83ce0e532455)
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];
16*ebc49f06SSasha Levin 	char *comm = NULL;
17*ebc49f06SSasha Levin 	FILE *fd;
181b1577dcSSasha Levin 
19*ebc49f06SSasha Levin 	sprintf(proc_name, "/proc/%d/stat", pid);
20*ebc49f06SSasha Levin 	fd = fopen(proc_name, "r");
21*ebc49f06SSasha Levin 	if (fd == NULL)
221b1577dcSSasha Levin 		goto cleanup;
23*ebc49f06SSasha Levin 	if (fscanf(fd, "%*u (%as)", &comm) == 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*ebc49f06SSasha Levin 	free(comm);
31*ebc49f06SSasha Levin 
32*ebc49f06SSasha Levin 	fclose(fd);
331a0ef251SSasha Levin 
341b1577dcSSasha Levin 	return;
351b1577dcSSasha Levin 
361b1577dcSSasha Levin cleanup:
37*ebc49f06SSasha Levin 	if (fd)
38*ebc49f06SSasha Levin 		fclose(fd);
39*ebc49f06SSasha Levin 	if (comm)
40*ebc49f06SSasha Levin 		free(comm);
41*ebc49f06SSasha Levin 
421b1577dcSSasha Levin 	kvm__remove_pidfile(name);
439dba6721SSasha Levin }
449dba6721SSasha Levin 
459dba6721SSasha Levin int kvm_cmd_list(int argc, const char **argv, const char *prefix)
469dba6721SSasha Levin {
479dba6721SSasha Levin 	kvm__enumerate_instances(print_guest);
489dba6721SSasha Levin 
499dba6721SSasha Levin 	return 0;
509dba6721SSasha Levin }
51