12
votes

Quand utiliser System () et quand utiliser Execv * ()?

Je dois exécuter une commande UNIX avec des arguments différents dans une boucle. Maintenant, je me demande si je devrais utiliser ExecVP (), en passant dans la CMD et les arguments, ou utilisez le système, construisant une chaîne composée de cmd + args?


0 commentaires

3 Réponses :


8
votes

Le EXEC La famille de fonctions remplacera le processus en cours par un nouveau, tandis que système surchargera le nouveau processus, puis attendez qu'il puisse finir. Lequel utiliser dépend de ce que vous voulez.

Puisque vous faites cela dans une boucle, je suppose que vous ne voulez pas remplacer le processus d'origine. Par conséquent, je vous suggère d'essayer d'aller avec le système .


3 commentaires

Le système soumet également la ligne à l'analyse de la ligne de commande, ce qui pourrait ouvrir des trous pour les attaques d'injection.


J'ai cherché des tutoriels à ce sujet sur le Web et la plupart des exemples sont un nouveau processus et que remplacé la fourchette avec ExecVP (). Après cela, le processus parent attendu que le processus d'enfant ait fini. Est-ce essentiellement quel système () fait?


Oui, c'est essentiellement ce que système () fait. Calling System () exécute également la coque par défaut et transmet votre programme comme argument, qui créera un peu plus de frais généraux.



6
votes

J'utiliserais Execvp uniquement si je ne peux pas réaliser ce que je veux avec système. Notez que pour obtenir l'équivalent du système, vous devez également avoir besoin de la manipulation des signaux.


0 commentaires

10
votes

Eh bien, les autres réponses sont principalement correctes.

Système, tandis que non seulement Fourche s, puis exécuté s, il ne 'T EXEC Votre processus, il exécute la coque par défaut, qui transmettez votre programme en tant qu'argument.

Donc, à moins que vous ne vouliez vraiment qu'une coquille (pour analyse de paramètres et similaires) est beaucoup plus efficace pour faire quelque chose comme: xxx


0 commentaires