2010-09-15 16 views
1

Je cherche une méthode alternative à la lecture du lien symbolique/proc/PID/exe dans lequel obtenir le chemin complet d'un processus dans Android/Linux. La raison en est que sur Android,/proc/PID/exe pour tout processus autre que le vôtre ou le 'soi' semble avoir un accès restreint (permission refusée).Alternative au lien symbolique/proc/PID/exe pour récupérer un autre chemin complet de processus via PID

J'ai regardé dans les suivants aussi bien - ils sont lisibles, mais ne semblent pas fonctionner:

  • /proc/PID/cmdline: contient rarement le chemin complet
  • /proc/PID/stat: ne contient que le nom de l'exécutable (pas de chemin)

A défaut du code en raison de l'autorisation refusée:

#include <unistd.h> 
// ... 
char buf[2048]; 
// "/proc/1234/exe" is of course replaced with a proper PID 
ssizet_t len = readlink("/proc/1234/exe", buf, sizeof(buf) - 1); 
if(-1 != len) { 
    buf[len] = '\0'; 
    // buf should contain full path 
} else { 
    // this path always reached for PID's other than my own or 
    // /proc/self/exe 
} 

Il doit y avoir une méthode alternative? Sous Windows, il y a bien sûr GetModuleFileNameEx, QueryFullProcessImageName(), etc.

Répondre

2

Il y a d'autres endroits où vous pouvez obtenir les informations - par exemple /proc/<pid>/maps - mais si vous n'êtes pas autorisé à accéder à /proc/<pid>/exe alors vous n'êtes pas autorisé à accéder ceux-là non plus.

Il n'y a pas de fin - c'est une conséquence du modèle de sécurité d'Android, où chaque application reçoit son propre UID.

+0

Cela s'applique à certaines choses dans/proc FS, mais d'autres que je peux lire. En outre, cela ne signifie pas nécessairement qu'il n'y a pas d'autre approche qui peut être utilisée. – NuSkooler