Ich muss einen Unix-Befehl mit verschiedenen Argumenten in einer Schleife ausführen. Nun frage ich mich, ob ich execvp() verwenden, die cmd und die Argumente übergeben oder das System verwenden soll, indem ich eine Zeichenfolge aus cmd + args erzeuge?Wann System() verwenden und wann execv *() verwenden?
Antwort
Nun, die anderen Antworten sind meist korrekt.
System, während nicht nur fork
s und dann exec
s, tut es nicht exec
Ihren Prozess, es läuft die Standard-Shell, das Programm als Argument übergeben.
Also, wenn Sie wirklich eine Shell (für Parameter-Parsing und dergleichen) wollen es ist viel effizienter wie etwas zu tun:
int i = fork();
if (i != 0) {
exec*(...); // whichever flavor fits the bill
} else {
wait(); // or something more sophisticated
}
Die exec
Familie von Funktionen wird den aktuellen Prozess durch einen neuen ersetzen, während system
den neuen Prozess abzweigen und dann darauf warten, dass er beendet wird. Welche zu verwenden ist, hängt davon ab, was Sie wollen.
Da Sie dies in einer Schleife tun, denke ich, dass Sie nicht den ursprünglichen Prozess ersetzen möchten. Daher schlage ich vor, dass Sie versuchen, mit system
zu gehen.
Ich würde execvp nur verwenden, wenn ich mit System nicht erreichen kann, was ich will. Beachten Sie, dass Sie, um das Äquivalent des Systems zu erhalten, auch execvp, fork und etwas Signalhandling benötigen.
- 1. Wann node.js verwenden und wann Ajax verwenden?
- 2. Wann "if" und "wann" in Clojure verwenden?
- 3. Wann und wann nicht CoreAnimation verwenden
- 4. Luftstrom: Wann SellerieExecutor und wann MesosExecutor verwenden
- 5. Wann Datenbankansichten verwenden und wann nicht?
- 6. Wann zu verwenden und wann nicht Python 3.5 `erwarten 'verwenden?
- 7. Wann socket.io zu verwenden und wann Ajax zu verwenden
- 8. Wann verwenden wir POJO und wann verwenden wir SLSB
- 9. Wann nicht ACS verwenden?
- 10. Wann SoapObject und SoapPrimitive verwenden
- 11. Wann MVC und EZB verwenden?
- 12. Wann IEquatable verwenden und warum
- 13. Was und wann Tuple verwenden?
- 14. Wann concat verwenden und anhängen?
- 15. Wann NSURLProtocol zu verwenden?
- 16. Wann HTTP-Proxy verwenden
- 17. Wann verwenden Sie Tabellencluster?
- 18. Wann Request.RegisterForDispose verwenden?
- 19. Perl: Wann verwenden Sie System() und wann installieren Sie das Paket?
- 20. Datenstrukturen - wann welche verwenden?
- 21. Wann Texturansichten zu verwenden
- 22. Wann "window.onload" verwenden?
- 23. Wann "löschen" verwenden?
- 24. Railties - Wann zu verwenden
- 25. Wann selbst zu verwenden?
- 26. Wann verwenden Sie Eigenschaften und wann in Java?
- 27. Wann Vektoren und wann Arrays in C++ verwenden?
- 28. Wann ein Modul zu verwenden, und wann eine Klasse
- 29. Wann sollte ich lineare neuronale Netze verwenden und wann nichtlinear?
- 30. Wann sollten wir instanceof verwenden und wann nicht
System unterwirft auch die Linie Linie Parsing-Befehl, der Macht Öffnen Sie Löcher für Injektionsangriffe. – falstro
Ich suchte nach einigen Tutorials im Internet und die meisten Beispiele fork() ed einen neuen Prozess und ersetzt die Gabel mit execvp(). Danach wartete der Elternprozess auf den Abschluss des Kindprozesses. Ist das im Grunde das System()? – helpermethod
Ja, das ist im Grunde das, was 'system()' tut. Das Aufrufen von 'system()' führt auch die Standard-Shell aus und übergibt Ihr Programm als Argument, was etwas mehr Overhead erzeugt. – jschmier