0

C++에서 프로세스를 독립적으로 포크하는 방법이 있습니까? 표준이 모든 함수 또는 라이브러리를 제공합니까?일부 표준 라이브러리와 같이 C++에서 프로세스를 독립적으로 포킹 할 수있는 플랫폼이 있습니까? 코드를 이식성있게 만들려면 어떻게해야합니까?

새 스레드를 만들려면 std::thread이 있어야합니다. 표준 구현시 사용되는 운영 체제의 기본 스레딩 모델을 사용합니다.

새로운 프로세스를 만드는 데 이와 같은 유사점이 있습니까?

리눅스에서는 fork() 시스템 호출을 사용하여 새 프로세스를 포크 할 수 있습니다. 그러나 이것은 Windows에서 작동하지 않습니다. 그래서, 같은 코드가 많은 플랫폼에서 재사용 될 수 있도록 프로세스를 포크하는 방법을 찾고 있습니다.

thisthis과 같이 이전에 묻는 유사한 질문에 대한 답변 중 일부는 QThread, OpenThread, Boost, SFML 등을 사용하는 것이 좋습니다. 그러나 현재 표준에서 제공하는 방법이 있습니까?

그렇지 않은 경우 어떻게 코드를 휴대용으로 만들 수 있습니까? 지금은 Windows 및 Linux에서만 작동해야하지만 일반적으로 일반적인 방법이 있는지 알고 싶어합니다.

+0

프로세스에'fork()'하는 플랫폼에 독립적 인 방법은 없습니다. 그게 전부 야. 이것은 어떤 표준에 의해서도 다루어지지 않습니다. POSIX는 Linux의 표준입니다. 필자는 Windows의 POSIX 호환 레이어에 대해 계속 듣고 있습니다. 그 사실을 조사하고 싶을 수도 있습니다. –

+1

이 질문은 귀하가 링크 한 질문과 정확히 일치합니다. 릴리스 된 표준 중 하나에서 새로운 프로세스를 생성 할 수있는 조항이 없기 때문에 모든 응답이 제 3 자 라이브러리를 참조합니다. –

+0

특히 관심이있을 수 있습니다 ... "현대 시스템에서 스레드와 프로세스 사이의 실용적인 차이는 슬림합니다"(http://stackoverflow.com/a/10602727/8877) 대답이있을 수 있습니다. 실제로 여러 프로세스가 필요하지 않을 수도 있습니다. –

답변

1

표준이 새로운 프로세스를 만드는 데 제공하는 유일한 것은 system입니다. 이렇게하면 일반적으로 쉘에 입력 한 것처럼 대충 처리되는 문자열을 전달할 수 있습니다 (단, 이는 보장되지 않습니다). 메모리가 작동하면 널 포인터를 전달하여 쉘을 열어서 (가능한 경우) 사용할 수 있습니다.

표준 범위 내에서 가능한 범위입니다.