시스템() 명령이 완료될 때까지 기다리지 않는 방법이 있습니까?(c)
다음과 유사:
시스템 호출 후 프로그램이 실행되지 않음 »
저는 C를 사용하는 것이 상당히 익숙하지 않지만 기본적으로 다음과 같은 라인을 실행하고 싶습니다.
int a = system("python -m plotter");
내가 개발한 파이썬 모듈을 실행할 것입니다.하지만 명령 실행이 끝날 때까지 기다리는 대신 나머지 c 프로그램이 계속 실행되기를 원합니다(파이썬 앱은 무한 루프에 있으므로 자동으로 닫히지 않습니다).C/C++을 사용하여 이것을 할 수 있는 방법이 있습니까?
업데이트: 솔루션:
int a = system("start python -m plotter &");
system()
단순히 셸에 인수를 전달합니다(보통 유닉스 계열 시스템에서)./bin/sh
).
사용해 보십시오.
int a = system("python -m plotter &");
물론 반환되는 가치는system()
파이썬 스크립트가 아직 완료되지 않았기 때문에 종료 상태가 되지 않습니다.
이것은 유닉스 계열 시스템(아마 MacOS 포함)에서만 작동할 것입니다. 특히 Cygwin에서 실행하지 않는 한 MS Windows에서는 작동하지 않을 것입니다.
윈도우즈의 경우system()
아마 호출할 것입니다.cmd.exe
유닉스 계열 시스템에서 사용되는 것과 동일한 구문의 명령을 수락하지 않습니다.하지만 윈도우start
명령이 작업을 수행해야 합니다.
int a = system("start python -m plotter");
Windows 전용 코드를 작성하는 경우start
Unix에서 사용할 수 없습니다.start
의 명령어$PATH
), 를 호출하여 하위 수준의 Windows 기능을 사용하는 것을 고려할 수 있습니다.이는 더 복잡하지만 프로세스가 실행되는 방식을 더 많이 제어할 수 있습니다.반면에, 만약에.system()
당신의 요구 사항에 부합한다면, 당신은 그것을 사용하는 것이 좋을 것입니다.
명령어 끝에 '&'을 추가하면 작동할 것으로 생각합니다.백그라운드에서 실행할 명령을 알려줍니다.
int a = system("python -m plotter &");
표준 라이브러리에는 방법이 없지만 OS에서 지원하는 경우 백그라운드에서 실행할 별도의 스레드를 만들거나 포크아웃할 수 있습니다.
Linux의 "시스템" 명령어는 실행이 완료되었을 때만 나머지 코드를 실행할 수 있습니다.
동시 처리를 원할 경우 포크()를 사용해야 합니다.
이 단어는 비동기 함수/메소드 호출입니다.C와 C++에는 이러한 기능이 없으므로 별도의 스레드에서 함수를 호출하거나 별도의 프로세스에서 실행할 시스템 호출을 사용해야 합니다.이 두 가지 방법은 모두 플랫폼별로 다르지만 플랫폼 간 스레딩 라이브러리가 있습니다.
unix에서는 별도의 프로세스에서 이를 수행하기 위해 포크(2)를 사용하여 새 프로세스를 만들고 exec(3)을 사용하여 해당 프로세스에서 새 프로그램을 실행할 수 있습니다.Windows에서 어떤 시스템 호출이 필요한지는 알 수 없지만 비슷한 것이어야 합니다.
언급URL : https://stackoverflow.com/questions/6962156/is-there-a-way-to-not-wait-for-a-system-command-to-finish-in-c
'programing' 카테고리의 다른 글
CMAKE_BUILD_TYPE= Release가 -DN DEBUG를 의미합니까? (0) | 2023.07.25 |
---|---|
PHP가 사용되지 않음:이름이 같은 메서드 (0) | 2023.07.25 |
express.js에서 요청을 발생시키는 도메인을 어떻게 얻습니까? (0) | 2023.07.25 |
브라우저의 Javascript에서 Ajax를 사용하여 spring mvc 컨트롤러로 어레이 데이터 전달 (0) | 2023.07.25 |
Python의 다중 선형 회귀 분석 (0) | 2023.07.20 |