proc.c revision 1b9cfd6ad305ad909e8ff17139111a7c78f01464
1#if HAVE_CONFIG_H 2#include "config.h" 3#endif 4 5#include <sys/types.h> 6#include <stdio.h> 7#include <string.h> 8#include <signal.h> 9#include <unistd.h> 10 11/* /proc/pid doesn't exist just after the fork, and sometimes `ltrace' 12 * couldn't open it to find the executable. So it may be necessary to 13 * have a bit delay 14 */ 15 16#define MAX_DELAY 100000 /* 100000 microseconds = 0.1 seconds */ 17 18/* 19 * Returns a file name corresponding to a running pid 20 */ 21char * pid2name(pid_t pid) 22{ 23 char proc_exe[1024]; 24 25 if (!kill(pid, 0)) { 26 int delay=0; 27 28 sprintf(proc_exe, "/proc/%d/exe", pid); 29 30 while(delay<MAX_DELAY) { 31 if (!access(proc_exe, F_OK)) { 32 return strdup(proc_exe); 33 } 34 delay += 1000; /* 1 milisecond */ 35 } 36 } 37 return NULL; 38} 39