FILE *fp = popen(cmd,"r");
...
fprintf(stderr,"%d\n",pclose(fp));
J'appelle ce à partir d'un script CGI. Cela a l'habitude de fonctionner, mais récemment la commande en cours d'exécution a commencé à échouer mystérieusement, donc j'ai ajouté le fprintf pour voir quel code d'état pclose() retourne, et j'ai été surpris de voir qu'il est 32512, ce qui correspond à un code de sortie os 127. J'ai vérifié que la commande n'est pas réellement exécutée, et la valeur de retour correspond à l'état de sortie 127.
J'ai essayé d'exécuter otool -L
sur le binaire en cours d'exécution, et tout semble bien. J'appelle la commande avec le chemin d'accès complet à la commande, donc il n'y a pas de changement, il ne trouve pas l'exécutable. J'ai imprimé le répertoire courant pour m'assurer que je suis où je pense que je suis, et ai vérifié que le binaire est visible.
Si j'exécute exactement la même commande connectée comme le même utilisateur que le CGI s'exécute comme il fonctionne bien. Si je cours exactement la même commande en la passant à system()
cela fonctionne aussi! Il échoue seulement lorsque j'essaie de l'exécuter via popen()
.
La commande ne semble même pas avoir d'importance! Je l'ai remplacé par d'autres commandes telles que ls
et j'ai toujours ce code de sortie bizarre.
Je suis à court de choses à essayer. Quoi d'autre cela pourrait-il être?