programing

시스템() 명령이 완료될 때까지 기다리지 않는 방법이 있습니까?(c)

muds 2023. 7. 25. 21:22
반응형

시스템() 명령이 완료될 때까지 기다리지 않는 방법이 있습니까?(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 전용 코드를 작성하는 경우startUnix에서 사용할 수 없습니다.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

반응형