Pourquoi le processus enfant renvoie-t-il l'état de sortie = 32512 dans unix?

Dans mon programme, je suis d'exécution de commande et d'obtenir le résultat (le journal, et de l'état de sortie). Aussi mon programme à l'appui de shell de commandes spécifiques (c'est à dire des commandes qui contient shell caractères spécifiques ~(tild),|(pipe),*). Mais lorsque j'essaie d'exécuter sh -c ls | wc dans mon répertoire home via mon programme, il n'a pas et son statut de sortie a été 32512, également dans le flux stderr "sh: ls | wc: command not found" a été imprimé.

Mais la chose intéressante est que la commande sh -c ls | wc œuvres corriger si je le lance dans un shell.

Quel est le problème? Ou plus préférable comment puis-je lance un shell de commandes spécifiques par l'intermédiaire de mon programme (j'.ce qui commande avec quels paramètres dois-je exécuter)?

Le code de la partie de soufflet est en partie enfant après le fork(). Il executs la commande.

tokenized_command est std::vector<std::string> où, dans mon cas "sh", "-c", "ls", "|", "wc" sont stockées, j'ai également essayé d'y stocker "sh", "-c", "\"ls | wc\""mais le résultat est le même. command est char * où plein de ligne de commande sont stockées.

        boost::shared_array<const char *> bargv(new const char *[tokenized_command.size() + 1]);
        const char **argv = bargv.get();
        for(int i = 0; i < tokenized_command.size(); ++i)
        {
            argv[i] = tokenized_command[i].c_str();
            printf("argv[%d]: %s\n", i, argv[i]); //trace
        }
        argv[tokenized_command.size()] = NULL;

        if(execvp(argv[0], (char * const *)argv) == -1)
        {
            fprintf(stderr, "Failed to execute command %s: %s", command, strerror(errno));
            _exit(EXIT_FAILURE);
        }

P. S.

Je sais que l'utilisation system(command) au lieu execvp peut résoudre mon problème. Mais system() attend jusqu'à ce que la commande est terminée, et ce n'est pas assez bon pour mon programme. Et aussi, je suis sûr que dans la mise en œuvre de system() un exec-la famille de fonctions est utilisé, de sorte que le problème peut être résolu par exec ainsi, mais je ne sais pas comment.

source d'informationauteur Mihran Hovsepyan