Eu não conheço nenhuma maneira portátil de fazer isso. Eu pensei que talvez ptrace() , mas não consigo ver como na manpage. Mesmo que isso funcione, "rastrear" o outro processo de qualquer maneira provavelmente é desnecessariamente invasivo
Para o Linux, sua sugestão de usar fopen("/proc/PID/status", "r") é a mais limpa e direta que você pretende obter. Parece ser o que o gdb faz.