util: Introduce qemu_get_pid_name
This is a small helper that tries to fetch binary name for given PID. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Message-Id: <4d75d475c1884f8e94ee8b1e57273ddf3ed68bf7.1474987617.git.mprivozn@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
				
					committed by
					
						
						Paolo Bonzini
					
				
			
			
				
	
			
			
			
						parent
						
							6a7b2b2100
						
					
				
				
					commit
					7dc9ae4339
				
			@@ -387,6 +387,16 @@ void os_mem_prealloc(int fd, char *area, size_t sz, Error **errp);
 | 
			
		||||
 | 
			
		||||
int qemu_read_password(char *buf, int buf_size);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * qemu_get_pid_name:
 | 
			
		||||
 * @pid: pid of a process
 | 
			
		||||
 *
 | 
			
		||||
 * For given @pid fetch its name. Caller is responsible for
 | 
			
		||||
 * freeing the string when no longer needed.
 | 
			
		||||
 * Returns allocated string on success, NULL on failure.
 | 
			
		||||
 */
 | 
			
		||||
char *qemu_get_pid_name(pid_t pid);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * qemu_fork:
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,7 @@
 | 
			
		||||
 | 
			
		||||
#ifdef __FreeBSD__
 | 
			
		||||
#include <sys/sysctl.h>
 | 
			
		||||
#include <libutil.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "qemu/mmap-alloc.h"
 | 
			
		||||
@@ -430,6 +431,32 @@ int qemu_read_password(char *buf, int buf_size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *qemu_get_pid_name(pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
    char *name = NULL;
 | 
			
		||||
 | 
			
		||||
#if defined(__FreeBSD__)
 | 
			
		||||
    /* BSDs don't have /proc, but they provide a nice substitute */
 | 
			
		||||
    struct kinfo_proc *proc = kinfo_getproc(pid);
 | 
			
		||||
 | 
			
		||||
    if (proc) {
 | 
			
		||||
        name = g_strdup(proc->ki_comm);
 | 
			
		||||
        free(proc);
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    /* Assume a system with reasonable procfs */
 | 
			
		||||
    char *pid_path;
 | 
			
		||||
    size_t len;
 | 
			
		||||
 | 
			
		||||
    pid_path = g_strdup_printf("/proc/%d/cmdline", pid);
 | 
			
		||||
    g_file_get_contents(pid_path, &name, &len, NULL);
 | 
			
		||||
    g_free(pid_path);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pid_t qemu_fork(Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    sigset_t oldmask, newmask;
 | 
			
		||||
 
 | 
			
		||||
@@ -575,6 +575,13 @@ int qemu_read_password(char *buf, int buf_size)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
char *qemu_get_pid_name(pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
    /* XXX Implement me */
 | 
			
		||||
    abort();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pid_t qemu_fork(Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    errno = ENOSYS;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user