루프에서 다른 args를 사용하여 unix 명령을 실행해야합니다. 이제는 execvp()를 사용하여 cmd와 args를 전달하거나 시스템을 사용하고 cmd + args로 구성된 문자열을 작성해야하는지 궁금합니다.system()을 언제 사용하고 execv *()를 사용해야합니까?
11
A
답변
10
글쎄, 다른 답변은 대부분입니다.
시스템은 fork
s이고 exec
s가 아니며 프로세스가 exec
이 아니며 프로그램을 인수로 전달하여 기본 셸을 실행합니다. 당신이 정말로 (매개 변수 구문 분석 등을위한) 쉘을 원하지 않는
그래서, 그것은이다 많은 같은 것을 할 것이 더 효율적 :
이int i = fork();
if (i != 0) {
exec*(...); // whichever flavor fits the bill
} else {
wait(); // or something more sophisticated
}
7
exec
패밀리는 현재 프로세스를 새 프로세스로 바꿉니다. system
은 새 프로세스를 포크하고 완료 될 때까지 대기합니다. 어느 것을 사용할지는 당신이 원하는 것에 달려 있습니다.
루프에서 이렇게하기 때문에 원본 프로세스를 바꾸지 않으려 고합니다. 따라서 system
과 (과) 함께 시도해 보시기 바랍니다.
5
시스템에서 원하는 것을 얻을 수없는 경우에만 execvp를 사용합니다. 시스템에 해당하는 것을 얻으려면 execvp, fork 및 일부 신호 처리가 필요합니다.
관련 문제
- 1. 언제 == 비교기 ===를 사용해야합니까?
- 2. 언제 GC.SuppressFinalize()를 사용해야합니까?
- 3. DataTrigger를 언제 사용하고 변환기를 사용해야합니까?
- 4. mySQL에서 언제 "또는"를 사용해야합니까?
- 5. 언제 @android : id /?를 사용해야합니까?
- 6. 언제 내부 조인을 사용하고 서브 쿼리를 사용해야합니까?
- 7. 언제 SQL을 사용하고 저장 프로 시저를 사용해야합니까?
- 8. 하위 도메인은 언제 사용해야합니까?
- 9. 언제 OSGi EventAdmin을 사용해야합니까?
- 10. 언제 개체 데이터베이스를 사용해야합니까?
- 11. 인터페이스 작성기는 언제 사용해야합니까?
- 12. 언제, 어떻게 대기열을 사용해야합니까?
- 13. div는 언제 사용해야합니까? 프레임은 언제 사용해야합니까? 다른 형식의 동적 콘텐츠는 언제 사용해야합니까?
- 14. 언제 WCF를 사용하고 아약스 웹 사이트에서 ADO 데이터 서비스를 사용해야합니까?
- 15. Import-Package는 언제 사용해야합니까? Require-Bundle은 언제 사용해야합니까?
- 16. 언제 _aligned_malloc()을 사용해야합니까?
- 17. 언제 FSharpFunc.Adapt를 사용해야합니까?
- 18. 우리는 ANTLR을 언제 사용해야합니까
- 19. cfthread는 언제 사용해야합니까?
- 20. 언제 ConcurrentSkipListMap을 사용해야합니까?
- 21. 언제 jQuery에서 마침표를 사용해야합니까?
- 22. 레일즈 : 언제 자기를 사용해야합니까?
- 23. 약한 참조는 언제 사용해야합니까?
- 24. 언제 EF4에서 POCO를 사용해야합니까?
- 25. 의존성 주입은 언제 사용해야합니까?
- 26. 언제 $ (document) .ready를 사용해야합니까?
- 27. 메모리 뷰는 언제 사용해야합니까?
- 28. Clojure에서 언제 deftype을 사용해야합니까?
- 29. Flash는 언제 사용해야합니까?
- 30. 데이터베이스 동의어는 언제 사용해야합니까?
시스템도하는 수도, 라인 구문 분석을 명령 라인을 과목을 주입 공격을위한 구멍을 열어 라. – falstro
웹에서이 튜토리얼을 찾아 보았습니다. 대부분의 예제에서는 fork()가 새로운 프로세스를 실행하고 execvp()로 포크를 대체했습니다. 그 후, 부모 프로세스는 자식 프로세스가 완료되기를 기다렸다. 이것은 기본적으로 system()이하는 것입니까? – helpermethod
예, 기본적으로'system()'이하는 일입니다. 'system()'을 호출하면 기본 쉘이 실행되고 프로그램을 인수로 전달하므로 인수가 조금 더 오버 헤드가됩니다. – jschmier